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{