Bug #16397
closedLine coverage is broken for until and while after guard clause
Description
Hello. I was working on ruby gem and received a bug with simplecov. See the following coverage report for stream reader. Simplecov uses line coverage report from ruby vm.
Today I've finally found a way to extract this bug from gem source. Please use ruby 2.6.5 to run ruby test.rb. The result will be [1, nil, 1, nil, 0, nil, 1]. The right result is [1, nil, 1, nil, 1, nil, 1].
We can workaround this bug by adding puts after guard clause. Another workaround is to rewrite inline until using loop do + break if. But guard case is the key. It breaks vm or vm trace system.
I will continue to investigate vm system. The suspicious thing is the method of calculating line number use pos-1 because PC points next instruction at the beginning of instruction but I am not sure.
Files