summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-cov/CodeCoverage.cpp
diff options
context:
space:
mode:
authorVedant Kumar <vsk@apple.com>2016-06-28 00:18:57 +0000
committerVedant Kumar <vsk@apple.com>2016-06-28 00:18:57 +0000
commit02507c435ca6957468cbaac76e8135494a0266c0 (patch)
treea7a644f55f9995e21e7de77da5e8cbf73c58a5f4 /llvm/tools/llvm-cov/CodeCoverage.cpp
parentdcbf4d68b2cc64319e65696b3bb09be1612605e9 (diff)
downloadbcm5719-llvm-02507c435ca6957468cbaac76e8135494a0266c0.tar.gz
bcm5719-llvm-02507c435ca6957468cbaac76e8135494a0266c0.zip
[llvm-cov] Add an -output-dir option for the show sub-command
Passing -output-dir path/to/dir to llvm-cov show creates path/to/dir if it doesn't already exist, and prints reports into that directory. In function view mode, all views are written into path/to/dir/functions.$EXTENSION. In file view mode, all views are written into path/to/dir/coverage/$PATH.$EXTENSION. llvm-svn: 273971
Diffstat (limited to 'llvm/tools/llvm-cov/CodeCoverage.cpp')
-rw-r--r--llvm/tools/llvm-cov/CodeCoverage.cpp39
1 files changed, 34 insertions, 5 deletions
diff --git a/llvm/tools/llvm-cov/CodeCoverage.cpp b/llvm/tools/llvm-cov/CodeCoverage.cpp
index 04901a27179..e7a4f676bcd 100644
--- a/llvm/tools/llvm-cov/CodeCoverage.cpp
+++ b/llvm/tools/llvm-cov/CodeCoverage.cpp
@@ -406,6 +406,12 @@ int CodeCoverageTool::show(int argc, const char **argv,
clEnumValEnd),
cl::init(CoverageViewOptions::OutputFormat::Text));
+ cl::opt<std::string> ShowOutputDirectory(
+ "output-dir", cl::init(""),
+ cl::desc("Directory in which coverage information is written out"));
+ cl::alias ShowOutputDirectoryA("o", cl::desc("Alias for --output-dir"),
+ cl::aliasopt(ShowOutputDirectory));
+
auto Err = commandLineParser(argc, argv);
if (Err)
return Err;
@@ -418,6 +424,14 @@ int CodeCoverageTool::show(int argc, const char **argv,
ViewOpts.ShowExpandedRegions = ShowExpansions;
ViewOpts.ShowFunctionInstantiations = ShowInstantiations;
ViewOpts.ShowFormat = ShowFormat;
+ ViewOpts.ShowOutputDirectory = ShowOutputDirectory;
+
+ if (ViewOpts.ShowOutputDirectory != "") {
+ if (auto E = sys::fs::create_directories(ViewOpts.ShowOutputDirectory)) {
+ error("Could not create output directory!", E.message());
+ return 1;
+ }
+ }
auto Coverage = load();
if (!Coverage)
@@ -436,8 +450,17 @@ int CodeCoverageTool::show(int argc, const char **argv,
<< "\n";
continue;
}
- mainView->print(outs(), /*WholeFile=*/false, /*ShowSourceName=*/true);
- outs() << "\n";
+
+ auto OSOrErr =
+ mainView->createOutputFile("functions", /*InToplevel=*/true);
+ if (Error E = OSOrErr.takeError()) {
+ handleAllErrors(OSOrErr.takeError(),
+ [&](const ErrorInfoBase &EI) { error(EI.message()); });
+ return 1;
+ }
+ std::unique_ptr<raw_ostream> OS = std::move(OSOrErr.get());
+ mainView->print(*OS.get(), /*WholeFile=*/false, /*ShowSourceName=*/true);
+ mainView->closeOutputFile(std::move(OS));
}
return 0;
}
@@ -459,10 +482,16 @@ int CodeCoverageTool::show(int argc, const char **argv,
continue;
}
- mainView->print(outs(), /*Wholefile=*/true,
+ auto OSOrErr = mainView->createOutputFile(SourceFile, /*InToplevel=*/false);
+ if (Error E = OSOrErr.takeError()) {
+ handleAllErrors(OSOrErr.takeError(),
+ [&](const ErrorInfoBase &EI) { error(EI.message()); });
+ return 1;
+ }
+ std::unique_ptr<raw_ostream> OS = std::move(OSOrErr.get());
+ mainView->print(*OS.get(), /*Wholefile=*/true,
/*ShowSourceName=*/ShowFilenames);
- if (SourceFiles.size() > 1)
- outs() << "\n";
+ mainView->closeOutputFile(std::move(OS));
}
return 0;
OpenPOWER on IntegriCloud