summaryrefslogtreecommitdiffstats
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.cpp47
1 files changed, 41 insertions, 6 deletions
diff --git a/llvm/tools/llvm-cov/CodeCoverage.cpp b/llvm/tools/llvm-cov/CodeCoverage.cpp
index 19b2618b552..6663730f05a 100644
--- a/llvm/tools/llvm-cov/CodeCoverage.cpp
+++ b/llvm/tools/llvm-cov/CodeCoverage.cpp
@@ -14,6 +14,7 @@
//===----------------------------------------------------------------------===//
#include "CoverageExporterJson.h"
+#include "CoverageExporterLcov.h"
#include "CoverageFilters.h"
#include "CoverageReport.h"
#include "CoverageSummaryInfo.h"
@@ -566,7 +567,9 @@ int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) {
cl::values(clEnumValN(CoverageViewOptions::OutputFormat::Text, "text",
"Text output"),
clEnumValN(CoverageViewOptions::OutputFormat::HTML, "html",
- "HTML output")),
+ "HTML output"),
+ clEnumValN(CoverageViewOptions::OutputFormat::Lcov, "lcov",
+ "lcov tracefile output")),
cl::init(CoverageViewOptions::OutputFormat::Text));
cl::opt<std::string> PathRemap(
@@ -674,6 +677,11 @@ int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) {
errs() << "Color output cannot be disabled when generating html.\n";
ViewOpts.Colors = true;
break;
+ case CoverageViewOptions::OutputFormat::Lcov:
+ if (UseColor == cl::BOU_TRUE)
+ errs() << "Color output cannot be enabled when generating lcov.\n";
+ ViewOpts.Colors = false;
+ break;
}
// If path-equivalence was given and is a comma seperated pair then set
@@ -833,6 +841,11 @@ int CodeCoverageTool::doShow(int argc, const char **argv,
if (Err)
return Err;
+ if (ViewOpts.Format == CoverageViewOptions::OutputFormat::Lcov) {
+ error("Lcov format should be used with 'llvm-cov export'.");
+ return 1;
+ }
+
ViewOpts.ShowLineNumbers = true;
ViewOpts.ShowLineStats = ShowLineExecutionCounts.getNumOccurrences() != 0 ||
!ShowRegions || ShowBestLineRegionsCounts;
@@ -964,6 +977,9 @@ int CodeCoverageTool::doReport(int argc, const char **argv,
if (ViewOpts.Format == CoverageViewOptions::OutputFormat::HTML) {
error("HTML output for summary reports is not yet supported.");
return 1;
+ } else if (ViewOpts.Format == CoverageViewOptions::OutputFormat::Lcov) {
+ error("Lcov format should be used with 'llvm-cov export'.");
+ return 1;
}
auto Coverage = load();
@@ -995,8 +1011,10 @@ int CodeCoverageTool::doExport(int argc, const char **argv,
if (Err)
return Err;
- if (ViewOpts.Format != CoverageViewOptions::OutputFormat::Text) {
- error("Coverage data can only be exported as textual JSON.");
+ if (ViewOpts.Format != CoverageViewOptions::OutputFormat::Text &&
+ ViewOpts.Format != CoverageViewOptions::OutputFormat::Lcov) {
+ error("Coverage data can only be exported as textual JSON or an "
+ "lcov tracefile.");
return 1;
}
@@ -1006,12 +1024,29 @@ int CodeCoverageTool::doExport(int argc, const char **argv,
return 1;
}
- auto Exporter = CoverageExporterJson(*Coverage.get(), ViewOpts, outs());
+ std::unique_ptr<CoverageExporter> Exporter;
+
+ switch (ViewOpts.Format) {
+ case CoverageViewOptions::OutputFormat::Text:
+ Exporter = llvm::make_unique<CoverageExporterJson>(*Coverage.get(),
+ ViewOpts, outs());
+ break;
+ case CoverageViewOptions::OutputFormat::HTML:
+ // Unreachable because we should have gracefully terminated with an error
+ // above.
+ llvm_unreachable("Export in HTML is not supported!");
+ case CoverageViewOptions::OutputFormat::Lcov:
+ Exporter = llvm::make_unique<CoverageExporterLcov>(*Coverage.get(),
+ ViewOpts, outs());
+ break;
+ default:
+ llvm_unreachable("Unknown coverage output format!");
+ }
if (SourceFiles.empty())
- Exporter.renderRoot(IgnoreFilenameFilters);
+ Exporter->renderRoot(IgnoreFilenameFilters);
else
- Exporter.renderRoot(SourceFiles);
+ Exporter->renderRoot(SourceFiles);
return 0;
}
OpenPOWER on IntegriCloud