Known problems#
Known problems of the current release, with detection and workaround. Entries are removed when a release fixes them; problems in the underlying LLVM tools stay listed with their upstream references.
Problem |
Detection |
Workaround / status |
|---|---|---|
Per-instantiation counting in llvm-cov. Template-heavy C++ files can
show lower line coverage than under gcov; |
Compare the per-file summary with the |
Upstream behaviour (llvm-project #93843, #111743, #119299). The error is towards under-reporting; numbers are reported as llvm-cov produces them. |
Rust branch coverage needs an unstable rustc flag.
|
Rust rows show |
On a stable-channel Ferrocene drop the flag; Rust branch coverage is then not available. |
Clang warns where GCC does not. Repositories with
|
|
Add |
Containerised tests produce no coverage. Instrumented binaries inside stock containers lack runtime dependencies and profraw files never reach the host. |
Exit 127 in the test log; no profraw. |
Exclude containerised or system tests from the coverage run; they keep running in the regular test jobs. |
QNX on-target coverage covers C++ only. rustc emits no gcov counters, and the LLVM profile transport from the QEMU guest is not established yet (tooling issue #427, track 2). |
Rust sources listed as |
Measure Rust with the Linux (LLVM) run of the same tree. |
Vendored external headers have no data on the gcov backend. Bazel’s per-test collector keeps only files of its instrumented-files manifest, which never lists sources from external repositories, although gcov itself recorded them. |
Such a header is |
Known limitation of Bazel’s collector; use the Linux report for those headers. |
gcov and LLVM count different lines. gcov reports only lines the compiler emitted code for: unused inline functions and closing braces have no line, while LLVM’s mapping keeps unused functions at 0 %. |
Different totals for the same file on QNX and Linux. |
Expected; compare the two reports per file, do not merge them. |
An archive is rejected by llvm-cov because one member has no
coverage mapping: the |
|
Handled since the pipeline passes only members with a mapping to llvm-cov; if seen, the installed version predates the fix. |
A header compiled under two different paths is reported once. When
a translation unit includes a header through its |
|
Expected; hits recorded only through the dropped variant are not counted. Include the header consistently. |
An in-scope header is absent from the report. A header no
translation unit includes, or one that contains only templates that are
never instantiated, produces no code and therefore no coverage mapping;
|
The file is named in the job summary under “In-scope files without
coverage data”, in |
Decide per file: write a test that instantiates it (it is shipped API),
or remove it from the target’s |
A header reached through several targets is compiled under several names. Virtual-include trees of targets outside the scope are resolved to the declared header by their path tail; if two in-scope files share that tail the header stays unresolved. |
|
Rename one of the files, or declare the header only once. |
A source could not be staged for llvm-cov. The reporter reads the sources from the scope’s exported files; a file that is neither there nor in the workspace directory gets no HTML page (its numbers stay in the index and the LCOV). |
|
Report it; every declared source is expected to be exported. |
Libraries tested from a |
Whole directories at 0 % on QNX that are covered on Linux;
|
Set |