aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-cov/CodeCoverage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-cov/CodeCoverage.cpp')
-rw-r--r--llvm/tools/llvm-cov/CodeCoverage.cpp36
1 files changed, 35 insertions, 1 deletions
diff --git a/llvm/tools/llvm-cov/CodeCoverage.cpp b/llvm/tools/llvm-cov/CodeCoverage.cpp
index e274483..494912e 100644
--- a/llvm/tools/llvm-cov/CodeCoverage.cpp
+++ b/llvm/tools/llvm-cov/CodeCoverage.cpp
@@ -38,6 +38,10 @@
using namespace llvm;
using namespace coverage;
+void exportCoverageDataToJson(StringRef ObjectFilename,
+ const coverage::CoverageMapping &CoverageMapping,
+ raw_ostream &OS);
+
namespace {
/// \brief The implementation of the coverage tool.
class CodeCoverageTool {
@@ -46,7 +50,9 @@ public:
/// \brief The show command.
Show,
/// \brief The report command.
- Report
+ Report,
+ /// \brief The export command.
+ Export
};
/// \brief Print the error message to the error output stream.
@@ -94,6 +100,9 @@ public:
int report(int argc, const char **argv,
CommandLineParserType commandLineParser);
+ int export_(int argc, const char **argv,
+ CommandLineParserType commandLineParser);
+
std::string ObjectFilename;
CoverageViewOptions ViewOpts;
std::string PGOFilename;
@@ -534,6 +543,8 @@ int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) {
return show(argc, argv, commandLineParser);
case Report:
return report(argc, argv, commandLineParser);
+ case Export:
+ return export_(argc, argv, commandLineParser);
}
return 0;
}
@@ -694,6 +705,24 @@ int CodeCoverageTool::report(int argc, const char **argv,
return 0;
}
+int CodeCoverageTool::export_(int argc, const char **argv,
+ CommandLineParserType commandLineParser) {
+
+ auto Err = commandLineParser(argc, argv);
+ if (Err)
+ return Err;
+
+ auto Coverage = load();
+ if (!Coverage) {
+ error("Could not load coverage information");
+ return 1;
+ }
+
+ exportCoverageDataToJson(ObjectFilename, *Coverage.get(), outs());
+
+ return 0;
+}
+
int showMain(int argc, const char *argv[]) {
CodeCoverageTool Tool;
return Tool.run(CodeCoverageTool::Show, argc, argv);
@@ -703,3 +732,8 @@ int reportMain(int argc, const char *argv[]) {
CodeCoverageTool Tool;
return Tool.run(CodeCoverageTool::Report, argc, argv);
}
+
+int exportMain(int argc, const char *argv[]) {
+ CodeCoverageTool Tool;
+ return Tool.run(CodeCoverageTool::Export, argc, argv);
+}