diff options
Diffstat (limited to 'yjit')
-rw-r--r-- | yjit/src/codegen.rs | 6 | ||||
-rw-r--r-- | yjit/src/stats.rs | 1 |
2 files changed, 7 insertions, 0 deletions
diff --git a/yjit/src/codegen.rs b/yjit/src/codegen.rs index e4cfe16e73..6643247989 100644 --- a/yjit/src/codegen.rs +++ b/yjit/src/codegen.rs @@ -4929,6 +4929,12 @@ fn gen_send_cfunc( // push_splat_args does stack manipulation so we can no longer side exit if flags & VM_CALL_ARGS_SPLAT != 0 { + if flags & VM_CALL_OPT_SEND != 0 { + // FIXME: This combination is buggy. + // For example `1.send(:==, 1, *[])` fails to adjust the stack properly + gen_counter_incr!(asm, send_cfunc_splat_send); + return CantCompile; + } let required_args : u32 = (cfunc_argc as u32).saturating_sub(argc as u32 - 1); // + 1 because we pass self if required_args + 1 >= C_ARG_OPNDS.len() as u32 { diff --git a/yjit/src/stats.rs b/yjit/src/stats.rs index 666816b2e9..583e82527d 100644 --- a/yjit/src/stats.rs +++ b/yjit/src/stats.rs @@ -192,6 +192,7 @@ make_counters! { send_cfunc_tracing, send_cfunc_kwargs, send_cfunc_splat_with_kw, + send_cfunc_splat_send, send_attrset_kwargs, send_iseq_tailcall, send_iseq_arity_error, |