1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Check type of instruction - can be INSN or ADJUST

If the type is ADJUST we don't want to treat it like an INSN so we have
to check the type before reading from `insn_info.events`.

[Bug #18001] [ruby-core:104371]

Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
This commit is contained in:
eileencodes 2021-06-23 13:28:22 -04:00 committed by Aaron Patterson
parent b29c48efc0
commit 31f4d26273
Notes: git 2021-06-24 03:34:59 +09:00
2 changed files with 15 additions and 0 deletions

View file

@ -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;

View file

@ -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