From d446f15c975923dd55757b44a059716d5299c92d Mon Sep 17 00:00:00 2001 From: nobu Date: Sun, 10 Sep 2017 16:19:40 +0000 Subject: compile.c: pop coverage trace * compile.c (iseq_compile_each0): pop trace for coverage only and clear its corresponding line. [ruby-core:82726] [Bug #13886] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59828 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- compile.c | 3 ++- test/coverage/test_coverage.rb | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/compile.c b/compile.c index 9f49db4748..35dc921abe 100644 --- a/compile.c +++ b/compile.c @@ -6594,7 +6594,8 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, NODE *node, int popp ((INSN *)saved_last_element)->insn_id == BIN(trace)) { POP_ELEMENT(ret); /* remove trace(coverage) */ - if (((INSN *)ret->last)->insn_id == BIN(trace)) { + if (IS_INSN_ID(ret->last, trace) && + (FIX2LONG(OPERAND_AT(ret->last, 0)) & RUBY_EVENT_COVERAGE)) { POP_ELEMENT(ret); RARRAY_ASET(ISEQ_LINE_COVERAGE(iseq), line - 1, Qnil); } diff --git a/test/coverage/test_coverage.rb b/test/coverage/test_coverage.rb index 23672fcade..2858260646 100644 --- a/test/coverage/test_coverage.rb +++ b/test/coverage/test_coverage.rb @@ -165,4 +165,14 @@ class TestCoverage < Test::Unit::TestCase } } end + + def test_nocoverage_optimized_line + assert_ruby_status(%w[], "#{<<-"begin;"}\n#{<<-'end;'}") + begin; + def foo(x) + x # optimized away + nil + end + end; + end end -- cgit v1.2.3