<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/120071>120071</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [llvm-cov] lcov-export generates invalid lcov files
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          zgtm
      </td>
    </tr>
</table>

<pre>
    In certain cases, `llvm-cov export` exports lcov files, that seem to be invalid. They contain coverage information for the line after the final newline character.

For these lcov files, `genhtml` (part of the lcov project) will report the following error:

```
genhtml: ERROR: (range) /some/path/supp.h contains only 2 lines but coverage data refers to line 3
```

## Reproduce

`main.c`:
```C
#define FOO();

void foobar() {
   #include "supp.h"
}

int main(){}
```

`supp.h`:
```C
#define BAR FOO
BAR()
```

Run
```sh
clang -o main -fcoverage-mapping -fprofile-instr-generate main.c
LLVM_PROFILE_FILE='main.profraw' ./main
llvm-profdata merge -sparse -o main.profdata main.profraw
llvm-cov export -format=lcov -instr-profile=main.profdata main > main.lcov
```

## Expected Behaviour

`main.lcov` does not contain

```
DA:3,0
```

For `supp.h`.


## Actual Behaviour

`main.lcov` contains

```
SF:/some/path/supp.h

DA:3,0
```

However, there is no line 3 in `supp.h`.

`genhtml main.lcov` will report "genhtml: ERROR: (range) /some/path/supp.h contains only 2 lines but coverage data refers to line 3"

## Additional Information

```
$ clang --version
Ubuntu clang version 19.1.1 (1ubuntu1)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-19/bin
```
```
$ llvm-profdata --version
Ubuntu LLVM version 19.1.1
  Optimized build.
```
```
$ llvm-cov --version
Ubuntu LLVM version 19.1.1
  Optimized build.
```

On Kubuntu 24.10.a

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8VlGPqzYT_TXOywhkDCHhIQ_kZtG3-m6VKr3t65WBAVwZG9km2Xt_fWUgm91kq-1DVQkh8HhmzhzmDObWilYh7sh6T9aHFR9dp83uZ-v6VanrH7tnBRUax4WCilu0hH0BklIpz31Q6TPgy6CNIyldnixIv9wIOe91HXdgEXtwGkoEoc5cijqEbx3-gEqrObQ-o-GtNzfa9NwJraDRBlyHIIVC4I3D-bURiktQeJnWq44bXjk0IaE5oXkxO1m8w0FS2qLqXC89VsK2AzcOdDNn8FsHo__EyhGWwUVICQZ9PXNKLaW-CNUCGqMNifM5GUnpctH8Gj3O4el0Op78A2Fbw1WLPiZhhdU9ElYM3HX-bRyGsLtSYEEr-QPYVK2FcnQ3UmruOBhs0FjP4lR3fJfeXywmLIYTDkbXY4WvGHsuVFj5ffE71F9mpxobH7E4HgnbEpaReD-7nrWoodG65Ga2ANl4EwAQFgtVybFGIIzNpRDGvN_mMHsL5cBnXoJu9ovlDnRKF-9P4O3z0wSR5vv8tMR8iHYa1dtF2xGaV5KrFgI9gYGgudIa9HwY_DcNmsFo3yiBUNaZoEWFhjuEhTeaf_36xy_ffz0di-evT9_9jcQHwjaT3fsafiFsAyFhxVQxzSd9eNP07Xo0LUJgB24sXqGEN_PbOIvvTVsQzJIg8WHq0wXlgpnEh8dgQOKnOar3-NtOeXoZsHJYwx47fhZ6NO9bZnJOKdQaLSjtrr362PyHnMR5TNgX-pjMK_LtV16EeoORV27k8jMQV508Jv-t8I3zsbz81idGtpTk6Sc4_6cveEYzDy00CMIXvagNPKkfFPE6VeAd2LcDhDD2n8-GWYk3huta-JHKJTzfBuwjk4QlsMglOKOx86bfy1G5cTEsyxBlYRRGvoponOzRLMhv3LTofIEv2_R7mgRDFUihxpegVaO3dwZ5Db2uceJj0Fa8EJo_K-u4lFgfhJnpKUZrCCukKP3dayLKCCtKoe5R31XwXnsfVOLlfFfINNWOgxO9-Ik1lKOQdfhP8kyK_PdS0Pyo4P8zo8CSMKIhJzRf1bu4zuKMr3AXbeIkXkfrJFl1uyxhVbReZ5s0i9JsE_OkbLI4TuIoidia0pXYMcqSiEVpxKKMJmGTZEgzjFi0bbZpQklCsedChr6cUJt2JawdcRcxSjfRSvISpZ2OB4wpvMBk9Q22PqzMbuKgHFtLEiqFdfYWxgknp3PFlSeyPkx_2mCZa9c5a6-Hgje_7NVo5K5zbrCztgkrWuG6sQwr3S_9cG2L1x93MWGzhBUL-POO_RUAAP__G7OxzA">