From ec3b48d3da437e3358f4b7ae1ae007741f4ccd7b Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Mon, 7 Apr 2025 15:28:53 -0700 Subject: [PATCH] Deopt if iseq trace events are enabled --- insns.def | 2 +- test/ruby/test_settracefunc.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/insns.def b/insns.def index e661246283..b0c74df220 100644 --- a/insns.def +++ b/insns.def @@ -916,7 +916,7 @@ opt_new VALUE argc = vm_ci_argc(cd->ci); VALUE val = TOPN(argc); - if (vm_method_cfunc_is(GET_ISEQ(), cd, val, rb_class_new_instance_pass_kw)) { + if (vm_method_cfunc_is(GET_ISEQ(), cd, val, rb_class_new_instance_pass_kw) && !(ruby_vm_event_flags & ISEQ_TRACE_EVENTS)) { RB_DEBUG_COUNTER_INC(opt_new_hit); val = rb_obj_alloc(val); TOPN(argc) = val; diff --git a/test/ruby/test_settracefunc.rb b/test/ruby/test_settracefunc.rb index fac6dd8185..55c07abbea 100644 --- a/test/ruby/test_settracefunc.rb +++ b/test/ruby/test_settracefunc.rb @@ -1999,7 +1999,7 @@ CODE TracePoint.new(:c_call, &capture_events).enable{ c.new } - assert_equal [:c_call, :itself, :initialize], events[0] + assert_equal [:c_call, :itself, :initialize], events[1] events.clear o = Class.new{