I tried to use cov show as a replacement for llvm-cov show on the example C++ program from https://clang.llvm.org/docs/SourceBasedCodeCoverage.html but encountered the following panic:
thread 'main' panicked at 'index out of bounds: the len is 3 but the index is 7', src/coverage/coverage_mapping.rs:514:13
stack backtrace:
0: rust_begin_unwind
at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:584:5
1: core::panicking::panic_fmt
at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/panicking.rs:142:14
2: core::panicking::panic_bounds_check
at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/panicking.rs:84:5
3: llvm_profparser::coverage::coverage_mapping::parse_counter
at ./src/coverage/coverage_mapping.rs:514:13
4: llvm_profparser::coverage::coverage_mapping::parse_mapping_regions
at ./src/coverage/coverage_mapping.rs:386:31
5: llvm_profparser::coverage::coverage_mapping::parse_coverage_functions
at ./src/coverage/coverage_mapping.rs:332:17
6: llvm_profparser::coverage::coverage_mapping::read_object_file::{{closure}}
at ./src/coverage/coverage_mapping.rs:70:18
7: core::option::Option<T>::map
at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/option.rs:929:29
8: llvm_profparser::coverage::coverage_mapping::read_object_file
at ./src/coverage/coverage_mapping.rs:67:19
9: llvm_profparser::coverage::coverage_mapping::CoverageMapping::new
at ./src/coverage/coverage_mapping.rs:107:31
10: cov::ShowCommand::run
at ./src/bin/cov.rs:46:23
11: cov::main
at ./src/bin/cov.rs:75:35
12: core::ops::function::FnOnce::call_once
at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/ops/function.rs:248:5
I know your project is mostly targeted for parsing profiling data from rust programs but since the coverage mapping format is the same it should work universally for other profdata too. Right?
Here are my steps to reproduce:
cd /tmp
git clone https://github.com/xd009642/llvm-profparser.git
cd llvm-profparser
cat <<EOF > foo.cc
#define BAR(x) ((x) || (x))
template <typename T> void foo(T x) {
for (unsigned I = 0; I < 10; ++I) { BAR(I); }
}
int main() {
foo<int>(0);
foo<float>(0);
return 0;
}
EOF
clang++ -fprofile-instr-generate -fcoverage-mapping foo.cc -o foo
LLVM_PROFILE_FILE="foo.profraw" ./foo
llvm-profdata merge -sparse foo.profraw -o foo.profdata
# Works
llvm-cov show ./foo -instr-profile=foo.profdata
# Works not
RUST_BACKTRACE=1 cargo run --bin cov -- show --instr-profile foo.profdata --object ./foo
OS: Arch Linux
Clang/LLVM version: 14.0.6
Any help to debug this further is highly appreciated!
I tried to use
cov showas a replacement forllvm-cov showon the example C++ program from https://clang.llvm.org/docs/SourceBasedCodeCoverage.html but encountered the following panic:I know your project is mostly targeted for parsing profiling data from rust programs but since the coverage mapping format is the same it should work universally for other profdata too. Right?
Here are my steps to reproduce:
OS: Arch Linux
Clang/LLVM version: 14.0.6
Any help to debug this further is highly appreciated!