llvm-cov: Fix reading gcov data that does not have function names
authorJustin Bogner <mail@justinbogner.com>
Mon, 8 Feb 2016 22:49:40 +0000 (22:49 +0000)
committerJustin Bogner <mail@justinbogner.com>
Mon, 8 Feb 2016 22:49:40 +0000 (22:49 +0000)
commit34a34aa89ea19bcdb193cc0ab4a859c878ebb57b
tree058e2f9291c47cdbb9847e4d2409ec3bb8cd601a
parent55adc9ddcc5be3c009b8a9167bbf13109e2a9674
llvm-cov: Fix reading gcov data that does not have function names

In order for recent gcov versions to read the coverage data, you have
to use UseCfgChecksum=true and FunctionNamesInData=false options for
coverage profiling pass. This is because gcov is expecting the
function section in .gcda to be exactly 3 words in size, containing
ident and two checksums.

While llvm-cov is compatible with UseCfgChecksum=true, it always
expects a function name in .gcda function sections (it's not
compatible with FunctionNamesInData=false). Thus it's currently
impossible to generate one set of coverage files that works with both
gcov and llvm-cov.

This change fixes the reading of coverage information to only read the
function name if it's present.

Patch by Arseny Kapoulkine. Thanks!

llvm-svn: 260162
llvm/lib/IR/GCOV.cpp
llvm/test/tools/llvm-cov/Inputs/gcov47_compatibility.gcda [new file with mode: 0644]
llvm/test/tools/llvm-cov/Inputs/gcov47_compatibility.gcno [new file with mode: 0644]
llvm/test/tools/llvm-cov/gcov47_compatibility.cpp [new file with mode: 0644]