Skip to content

-C instrument-coverage does not work with crate-type = ["dylib"] dependency on windows-msvc #124372

Open
@taiki-e

Description

@taiki-e

Repro

# Cargo.toml
[package]
name = "repro"
version = "0.1.0"
edition = "2021"

[dependencies]
dylib = { path = "dylib" }
// src\lib.rs
use dylib as _; // link dylib

pub fn double(x: i64) -> i64 {
    x * x
}

#[cfg(test)]
mod test {
    use crate::double;

    #[test]
    fn test_double() {
        assert_eq!(4, double(2))
    }
}
# dylib\Cargo.toml
[package]
name = "dylib"
version = "0.1.0"
edition = "2021"

[lib]
crate-type = ["dylib"]
// dylib\src\lib.rs
// empty
# With powershell
$ $env:RUSTFLAGS="-C instrument-coverage"; cargo test --tests -v
   Compiling dylib v0.1.0 (C:\Users\taiki\projects\tmp\coverage_debugging\dylib)
     Running `rustc --crate-name dylib --edition=2021 dylib\src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=183 --crate-type dylib --emit=dep-info,link -C prefer-dynamic -C embed-bitcode=no -C debuginfo=2 -C metadata=7a6a43aab10b14a1 --out-dir C:\Users\taiki\projects\tmp\coverage_debugging\target\debug\deps -C incremental=C:\Users\taiki\projects\tmp\coverage_debugging\target\debug\incremental -L dependency=C:\Users\taiki\projects\tmp\coverage_debugging\target\debug\deps -C instrument-coverage`
   Compiling repro v0.1.0 (C:\Users\taiki\projects\tmp\coverage_debugging)
     Running `rustc --crate-name repro --edition=2021 src\lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=183 --emit=dep-info,link -C embed-bitcode=no -C debuginfo=2 --test -C metadata=ab884994c6371615 -C extra-filename=-ab884994c6371615 --out-dir C:\Users\taiki\projects\tmp\coverage_debugging\target\debug\deps -C incremental=C:\Users\taiki\projects\tmp\coverage_debugging\target\debug\incremental -L dependency=C:\Users\taiki\projects\tmp\coverage_debugging\target\debug\deps --extern dylib=C:\Users\taiki\projects\tmp\coverage_debugging\target\debug\deps\dylib.dll -C instrument-coverage`
    Finished `test` profile [unoptimized + debuginfo] target(s) in 0.40s
     Running `C:\Users\taiki\projects\tmp\coverage_debugging\target\debug\deps\repro-ab884994c6371615.exe`

running 1 test
test test::test_double ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

LLVM Profile Error: Runtime and instrumentation version mismatch : expected 9, but get -1879048144

I expected to see this happen: no "LLVM Profile Error"

Instead, this happened: the above "LLVM Profile Error"

If the dependency is not dylib, or if the dylib crate itself is tested alone, this problem does not occur.
This problem also occurs when both the repro crate and the dylib crate are dylib.

Originally reported in taiki-e/cargo-llvm-cov#364 by @mdeering24.

Meta

rustc --version --verbose:

rustc 1.79.0-nightly (ef8b9dcf2 2024-04-24)
binary: rustc
commit-hash: ef8b9dcf23700f2e2265317611460d3a65c19eff
commit-date: 2024-04-24
host: aarch64-pc-windows-msvc
release: 1.79.0-nightly
LLVM version: 18.1.4

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-code-coverageArea: Source-based code coverage (-Cinstrument-coverage)C-bugCategory: This is a bug.O-windows-msvcToolchain: MSVC, Operating system: Windows

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions