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