summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compile.c1
-rw-r--r--test/coverage/test_coverage.rb14
2 files changed, 15 insertions, 0 deletions
diff --git a/compile.c b/compile.c
index c541711..a73a5be 100644
--- a/compile.c
+++ b/compile.c
@@ -3088,6 +3088,7 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal
*/
int stop_optimization =
ISEQ_COVERAGE(iseq) && ISEQ_LINE_COVERAGE(iseq) &&
+ nobj->link.type == ISEQ_ELEMENT_INSN &&
nobj->insn_info.events;
if (!stop_optimization) {
INSN *pobj = (INSN *)iobj->link.prev;
diff --git a/test/coverage/test_coverage.rb b/test/coverage/test_coverage.rb
index a80e333..22557bd 100644
--- a/test/coverage/test_coverage.rb
+++ b/test/coverage/test_coverage.rb
@@ -760,4 +760,18 @@ class TestCoverage < Test::Unit::TestCase
foo { raise } rescue nil
end;
end
+
+ def test_coverage_with_asan
+ result = { :lines => [1, 1, 0, 0, nil, nil, nil] }
+
+ assert_coverage(<<~"end;", { lines: true }, result) # Bug #18001
+ class Foo
+ def bar
+ baz do |x|
+ next unless Integer == x
+ end
+ end
+ end
+ end;
+ end
end