summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Bogner <mail@justinbogner.com>2014-01-29 21:31:34 +0000
committerJustin Bogner <mail@justinbogner.com>2014-01-29 21:31:34 +0000
commit5119fd5e0f1771a2ad52a33d7b3b2de3c1e38934 (patch)
tree7d17f44dbd3973a7b6c3c78df63f897fad870f1c
parent94b3a88395ff0ea6c253efe5dd2b9d400ffe7c9d (diff)
downloadllvm-5119fd5e0f1771a2ad52a33d7b3b2de3c1e38934.tar.gz
llvm-5119fd5e0f1771a2ad52a33d7b3b2de3c1e38934.tar.bz2
llvm-5119fd5e0f1771a2ad52a33d7b3b2de3c1e38934.tar.xz
llvm-cov: Expect a source file as a positional parameter
Currently, llvm-cov isn't command-line compatible with gcov, which accepts a source file name as its first parameter and infers the gcno and gcda file names from that. This change keeps our -gcda and -gcno options available for convenience in overriding this behaviour, but adds the required parameter and inference behaviour as a compatible default. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200417 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--test/tools/llvm-cov/llvm-cov.test20
-rw-r--r--tools/llvm-cov/llvm-cov.cpp30
2 files changed, 27 insertions, 23 deletions
diff --git a/test/tools/llvm-cov/llvm-cov.test b/test/tools/llvm-cov/llvm-cov.test
index abca45f359..411ac1f873 100644
--- a/test/tools/llvm-cov/llvm-cov.test
+++ b/test/tools/llvm-cov/llvm-cov.test
@@ -5,34 +5,34 @@ RUN: mkdir %t
RUN: cd %t
RUN: cp %p/Inputs/test* .
-RUN: llvm-cov -gcno=test.gcno -gcda=test.gcda | diff test_no_options.output -
-RUN: llvm-cov -gcno=test.gcno -gcda=test.gcda -f | diff test_-f.output -
+RUN: llvm-cov test.c | diff test_no_options.output -
+RUN: llvm-cov test.c -f | diff test_-f.output -
RUN: diff -aub test_no_options.cpp.gcov test.cpp.gcov
RUN: diff -aub test_no_options.h.gcov test.h.gcov
-RUN: llvm-cov -gcno=test.gcno -gcda=test.gcda -a
+RUN: llvm-cov test.c -a
RUN: diff -aub test_-a.cpp.gcov test.cpp.gcov
RUN: diff -aub test_-a.h.gcov test.h.gcov
-RUN: llvm-cov -gcno=test.gcno -gcda=test.gcda -a -b | diff test_-b.output -
+RUN: llvm-cov test.c -a -b | diff test_-b.output -
# This is expected to fail because gcov doesn't actually output real branch or
# call statistics on a per function basis.
-RUN: llvm-cov -gcno=test.gcno -gcda=test.gcda -a -b -f | not diff test_-b_-f.output -
+RUN: llvm-cov test.c -a -b -f | not diff test_-b_-f.output -
RUN: diff -aub test_-a_-b.cpp.gcov test.cpp.gcov
RUN: diff -aub test_-a_-b.h.gcov test.h.gcov
-RUN: llvm-cov -gcno=test.gcno -gcda=test.gcda -a -b -u
+RUN: llvm-cov test.c -a -b -u
RUN: diff -aub test_-a_-b_-u.cpp.gcov test.cpp.gcov
RUN: diff -aub test_-a_-b_-u.h.gcov test.h.gcov
-RUN: llvm-cov -gcno=test.gcno -gcda=test.gcda -a -b -c -u
+RUN: llvm-cov test.c -a -b -c -u
RUN: diff -aub test_-a_-b_-c_-u.cpp.gcov test.cpp.gcov
RUN: diff -aub test_-a_-b_-c_-u.h.gcov test.h.gcov
-RUN: not llvm-cov -gcno=test_read_fail.gcno -gcda=test.gcda
+RUN: not llvm-cov test.c -gcno=test_read_fail.gcno
-RUN: not llvm-cov -gcno=test.gcno -gcda=test_file_checksum_fail.gcda
+RUN: not llvm-cov test.c -gcda=test_file_checksum_fail.gcda
-RUN: not llvm-cov -gcno=test.gcno -gcda=test_func_checksum_fail.gcda
+RUN: not llvm-cov test.c -gcda=test_func_checksum_fail.gcda
XFAIL: powerpc64, s390x, mips, sparc
diff --git a/tools/llvm-cov/llvm-cov.cpp b/tools/llvm-cov/llvm-cov.cpp
index 31f6ad0058..177c99d896 100644
--- a/tools/llvm-cov/llvm-cov.cpp
+++ b/tools/llvm-cov/llvm-cov.cpp
@@ -21,6 +21,9 @@
#include "llvm/Support/system_error.h"
using namespace llvm;
+static cl::opt<std::string> SourceFile(cl::Positional, cl::Required,
+ cl::desc("SOURCEFILE"));
+
static cl::opt<bool>
DumpGCOV("dump", cl::init(false), cl::desc("dump gcov file"));
@@ -56,9 +59,12 @@ int main(int argc, char **argv) {
cl::ParseCommandLineOptions(argc, argv, "llvm coverage tool\n");
- GCOVFile GF;
if (InputGCNO.empty())
- errs() << " " << argv[0] << ": No gcov input file!\n";
+ InputGCNO = SourceFile.substr(0, SourceFile.rfind(".")) + ".gcno";
+ if (InputGCDA.empty())
+ InputGCDA = SourceFile.substr(0, SourceFile.rfind(".")) + ".gcda";
+
+ GCOVFile GF;
OwningPtr<MemoryBuffer> GCNO_Buff;
if (error_code ec = MemoryBuffer::getFileOrSTDIN(InputGCNO, GCNO_Buff)) {
@@ -71,17 +77,15 @@ int main(int argc, char **argv) {
return 1;
}
- if (!InputGCDA.empty()) {
- OwningPtr<MemoryBuffer> GCDA_Buff;
- if (error_code ec = MemoryBuffer::getFileOrSTDIN(InputGCDA, GCDA_Buff)) {
- errs() << InputGCDA << ": " << ec.message() << "\n";
- return 1;
- }
- GCOVBuffer GCDA_GB(GCDA_Buff.get());
- if (!GF.readGCDA(GCDA_GB)) {
- errs() << "Invalid .gcda File!\n";
- return 1;
- }
+ OwningPtr<MemoryBuffer> GCDA_Buff;
+ if (error_code ec = MemoryBuffer::getFileOrSTDIN(InputGCDA, GCDA_Buff)) {
+ errs() << InputGCDA << ": " << ec.message() << "\n";
+ return 1;
+ }
+ GCOVBuffer GCDA_GB(GCDA_Buff.get());
+ if (!GF.readGCDA(GCDA_GB)) {
+ errs() << "Invalid .gcda File!\n";
+ return 1;
}
if (DumpGCOV)