summaryrefslogtreecommitdiffstats
path: root/llvm/test/tools/llvm-cov/gcov47_compatibility.cpp
diff options
context:
space:
mode:
authorJustin Bogner <mail@justinbogner.com>2016-02-08 22:49:40 +0000
committerJustin Bogner <mail@justinbogner.com>2016-02-08 22:49:40 +0000
commit34a34aa89ea19bcdb193cc0ab4a859c878ebb57b (patch)
tree058e2f9291c47cdbb9847e4d2409ec3bb8cd601a /llvm/test/tools/llvm-cov/gcov47_compatibility.cpp
parent55adc9ddcc5be3c009b8a9167bbf13109e2a9674 (diff)
downloadbcm5719-llvm-34a34aa89ea19bcdb193cc0ab4a859c878ebb57b.tar.gz
bcm5719-llvm-34a34aa89ea19bcdb193cc0ab4a859c878ebb57b.zip
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
Diffstat (limited to 'llvm/test/tools/llvm-cov/gcov47_compatibility.cpp')
-rw-r--r--llvm/test/tools/llvm-cov/gcov47_compatibility.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-cov/gcov47_compatibility.cpp b/llvm/test/tools/llvm-cov/gcov47_compatibility.cpp
new file mode 100644
index 00000000000..02f8d787fc3
--- /dev/null
+++ b/llvm/test/tools/llvm-cov/gcov47_compatibility.cpp
@@ -0,0 +1,30 @@
+// Make sure that llvm-cov can read coverage data written in gcov47+ compatible
+// format.
+
+// Compile with these arguments and run the result to generate .gc* files:
+// -coverage -Xclang -coverage-no-function-names-in-data
+// -Xclang -coverage-cfg-checksum -Xclang -coverage-version='407*'
+
+// We need shell for cd
+// REQUIRES: shell
+
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: cd %t
+// RUN: cp %s %p/Inputs/gcov47_compatibility.gc* .
+
+// RUN: llvm-cov gcov gcov47_compatibility.cpp | FileCheck %s --check-prefix=STDOUT
+// STDOUT: File 'gcov47_compatibility.cpp'
+// STDOUT: Lines executed:100.00% of 1
+// STDOUT: gcov47_compatibility.cpp:creating 'gcov47_compatibility.cpp.gcov'
+
+// RUN: FileCheck %s --check-prefix=GCOV < %t/gcov47_compatibility.cpp.gcov
+// GCOV: -: 0:Runs:1
+// GCOV: -: 0:Programs:1
+
+int main(int argc, const char *argv[]) { // GCOV: -: [[@LINE]]:int main(
+ return 0; // GCOV: 1: [[@LINE]]: return
+} // GCOV: -: [[@LINE]]:}
+
+// llvm-cov doesn't work on big endian yet
+// XFAIL: powerpc64-, s390x, mips-, mips64-, sparc
OpenPOWER on IntegriCloud