taiki-e / cargo-llvm-cov

Cargo subcommand to easily use LLVM source-based code coverage (-C instrument-coverage).
Apache License 2.0
900 stars 57 forks source link

report fails with: Profile uses raw profile format version = 10; expected version = 9 #379

Open jayvdb opened 1 month ago

jayvdb commented 1 month ago

In my workflow, this succeeds, and the expected results are uploaded into our deepsource tracker. (https://github.com/taiki-e/cargo-llvm-cov/issues/375 still happens; I'll see if I can dig up some details that I can add to that)

cargo-llvm-cov llvm-cov --version cargo-llvm-cov 0.6.11 cargo +nightly llvm-cov test --no-clean --include-build-script --branch --cobertura --output-path coverage.xml --workspace --no-fail-fast --all-features

But this fails in the same workflow with the same version of cargo-llvm-cov and all other binaries

> cargo llvm-cov report
warning: /__w/<project name>/<project name>/target/llvm-cov-target/<project name>-10069-7949258829508643699_0.profraw: raw profile version mismatch: Profile uses raw profile format version = 10; expected version = 9
PLEASE update this tool to version in the raw profile, or regenerate raw profile with expected version.
warning: /__w/<project name>/<project name>/target/llvm-cov-target/<project name>-10475-7279976441539901951_0.profraw: raw profile version mismatch: Profile uses raw profile format version = 10; expected version = 9
...
error: no profile can be merged
error: failed to merge profile data: process didn't exit successfully: `/work/home/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/bin/llvm-profdata merge -sparse -f /__w/<project name>/<project name>/target/llvm-cov-target/<project name>-profraw-list -o /__w/<project name>/<project name>/target/llvm-cov-target/<project name>.profdata` (exit status: 1)
taiki-e commented 1 month ago

cargo +nightly llvm-cov test --no-clean

cargo llvm-cov report

The first appears to be using nightly and the second perhaps stable.

The LLVM version used by the compiler that actually generates the profarw files and the LLVM tool that reads them (in this case, the LLVM tool included in the rustc that called report) must be compatible. In particular, LLVM 19 (prerelease version, used in recent nightly rustc) and 18 (used in the latest stable rustc), LLVM 18 and 17 (or earlier) are incompatible.

jayvdb commented 1 month ago

Yup, changing it to cargo +nightly llvm-cov report fixed this problem.

Happy for this issue to be closed, unless there is some way for cargo-llvm-cov to handle this better.