From 3e02cd518fbe4d91c2aca7fbc3c5aafa387d3cb7 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Tue, 23 Jun 2020 23:41:57 -0700 Subject: Trace :return of builtin methods using opt_invokebuiltin_delegate_leave insn. Since Ruby 2.7, :return of methods using builtin have not been traced properly. --- test/ruby/test_settracefunc.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'test/ruby') diff --git a/test/ruby/test_settracefunc.rb b/test/ruby/test_settracefunc.rb index 300033ae7e..80490204ca 100644 --- a/test/ruby/test_settracefunc.rb +++ b/test/ruby/test_settracefunc.rb @@ -2292,4 +2292,18 @@ class TestSetTraceFunc < Test::Unit::TestCase def test_stat_exists assert_instance_of Hash, TracePoint.stat end + + def test_tracepoint_opt_invokebuiltin_delegate_leave + code = 'puts RubyVM::InstructionSequence.of("\x00".method(:unpack)).disasm' + out, _err, _status = EnvUtil.invoke_ruby(['-e', code], '', true) + assert_match /^0000 opt_invokebuiltin_delegate_leave /, out + + events = [] + TracePoint.new(:return) do |tp| + events << [tp.event, tp.method_id] + end.enable do + "\x00".unpack("c") + end + assert_equal [[:return, :unpack]], events + end end -- cgit v1.2.3