Project

General

Profile

Actions

Bug #16397

closed

Line coverage is broken for until and while after guard clause

Added by puchuu (Andrew Aladjev) over 5 years ago. Updated over 5 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
2.6.5
[ruby-core:96088]

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

test.rb (78 Bytes) test.rb puchuu (Andrew Aladjev), 12/03/2019 09:25 PM
cov.rb (67 Bytes) cov.rb puchuu (Andrew Aladjev), 12/03/2019 09:25 PM

Related issues 1 (0 open1 closed)

Is duplicate of Ruby - Bug #15980: Coverage shows while/until after raise if/unless as uncovered lineClosedmame (Yusuke Endoh)Actions
Actions

Also available in: Atom PDF

Like0
Like0Like0