"Jump to the function exit" in lcov report for branch at top level of module · Issue #1874 · nedbat/coveragepy (original) (raw)

This rather peculiar test case was delta-minimized from real code (appdirs.py 1.4.1). It is formatting sensitive. In particular, removing the #! line or moving the close parenthesis that's currently on a line by itself to the return bar( line will break it.

#! /usr/bin/env python
def foo():
    return bar(
    )
if "x" == "y":  # line 5
    pass

Running coverage run --branch and then coverage lcov on this test case will produce these branch coverage records:

BRDA:5,0,jump to line 6,0
BRDA:5,0,jump to the function exit,1
BRF:2
BRH:1

But line 5 is not in a function. We should instead get

BRDA:5,0,jump to line 6,0
BRDA:5,0,exit the module,1

which is what we do get if the close paren on line 4 is moved to line 3 (modulo #1873).

I presume that the code on lines 1-4 has confused the static analysis engine into thinking line 5 is inside a function, but then the arc description logic can't get a name for that function (because it doesn't exist).