aboutsummaryrefslogtreecommitdiff
path: root/tools/llvm-cov/CodeCoverage.cpp
diff options
context:
space:
mode:
authorSean Eveson <eveson.sean@gmail.com>2017-09-27 16:20:07 +0000
committerSean Eveson <eveson.sean@gmail.com>2017-09-27 16:20:07 +0000
commit950974fdb5b254e8b79390d0ba844462d68474de (patch)
tree2cd727d3892c2d0d7894e8a503dc2b56b65428fe /tools/llvm-cov/CodeCoverage.cpp
parent13e889d253cc0ebc982da3ef400e7ed3396aaf0a (diff)
Revert "[llvm-cov] Create directory structure when filtering using -name*= options"
Test failures. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@314314 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-cov/CodeCoverage.cpp')
-rw-r--r--tools/llvm-cov/CodeCoverage.cpp77
1 files changed, 31 insertions, 46 deletions
diff --git a/tools/llvm-cov/CodeCoverage.cpp b/tools/llvm-cov/CodeCoverage.cpp
index 811ac53e244..1ea54a8cffd 100644
--- a/tools/llvm-cov/CodeCoverage.cpp
+++ b/tools/llvm-cov/CodeCoverage.cpp
@@ -35,9 +35,7 @@
#include "llvm/Support/Threading.h"
#include "llvm/Support/ThreadPool.h"
#include "llvm/Support/ToolOutputFile.h"
-
#include <functional>
-#include <map>
#include <system_error>
using namespace llvm;
@@ -528,8 +526,7 @@ void CodeCoverageTool::writeSourceFileView(StringRef SourceFile,
auto OS = std::move(OSOrErr.get());
View->print(*OS.get(), /*Wholefile=*/true,
- /*ShowSourceName=*/ShowFilenames,
- /*ShowTitle=*/ViewOpts.hasOutputDirectory());
+ /*ShowSourceName=*/ShowFilenames);
Printer->closeViewFile(std::move(OS));
}
@@ -848,54 +845,29 @@ int CodeCoverageTool::show(int argc, const char **argv,
auto Printer = CoveragePrinter::create(ViewOpts);
- if (SourceFiles.empty())
- // Get the source files from the function coverage mapping.
- for (StringRef Filename : Coverage->getUniqueSourceFiles())
- SourceFiles.push_back(Filename);
-
- // Create an index out of the source files.
- if (ViewOpts.hasOutputDirectory()) {
- if (Error E = Printer->createIndexFile(SourceFiles, *Coverage, Filters)) {
- error("Could not create index file!", toString(std::move(E)));
+ if (!Filters.empty()) {
+ auto OSOrErr = Printer->createViewFile("functions", /*InToplevel=*/true);
+ if (Error E = OSOrErr.takeError()) {
+ error("Could not create view file!", toString(std::move(E)));
return 1;
}
- }
+ auto OS = std::move(OSOrErr.get());
- if (!Filters.empty()) {
- // Build the map of filenames to functions.
- std::map<llvm::StringRef, std::vector<const FunctionRecord *>>
- FilenameFunctionMap;
- for (const auto &SourceFile : SourceFiles)
- for (const auto &Function : Coverage->getCoveredFunctions(SourceFile))
- if (Filters.matches(*Coverage.get(), Function))
- FilenameFunctionMap[SourceFile].push_back(&Function);
-
- // Only print filter matching functions for each file.
- for (const auto &FileFunc : FilenameFunctionMap) {
- const StringRef &File = FileFunc.first;
- const auto &Functions = FileFunc.second;
-
- auto OSOrErr = Printer->createViewFile(File, /*InToplevel=*/false);
- if (Error E = OSOrErr.takeError()) {
- error("Could not create view file!", toString(std::move(E)));
- return 1;
- }
- auto OS = std::move(OSOrErr.get());
-
- bool ShowTitle = true;
- for (const auto *Function : Functions) {
- auto FunctionView = createFunctionView(*Function, *Coverage);
- if (!FunctionView) {
- warning("Could not read coverage for '" + Function->Name + "'.");
- continue;
- }
- FunctionView->print(*OS.get(), /*WholeFile=*/false,
- /*ShowSourceName=*/true, ShowTitle);
- ShowTitle = false;
+ // Show functions.
+ for (const auto &Function : Coverage->getCoveredFunctions()) {
+ if (!Filters.matches(*Coverage.get(), Function))
+ continue;
+
+ auto mainView = createFunctionView(Function, *Coverage);
+ if (!mainView) {
+ warning("Could not read coverage for '" + Function.Name + "'.");
+ continue;
}
- Printer->closeViewFile(std::move(OS));
+ mainView->print(*OS.get(), /*WholeFile=*/false, /*ShowSourceName=*/true);
}
+
+ Printer->closeViewFile(std::move(OS));
return 0;
}
@@ -904,6 +876,19 @@ int CodeCoverageTool::show(int argc, const char **argv,
(SourceFiles.size() != 1) || ViewOpts.hasOutputDirectory() ||
(ViewOpts.Format == CoverageViewOptions::OutputFormat::HTML);
+ if (SourceFiles.empty())
+ // Get the source files from the function coverage mapping.
+ for (StringRef Filename : Coverage->getUniqueSourceFiles())
+ SourceFiles.push_back(Filename);
+
+ // Create an index out of the source files.
+ if (ViewOpts.hasOutputDirectory()) {
+ if (Error E = Printer->createIndexFile(SourceFiles, *Coverage)) {
+ error("Could not create index file!", toString(std::move(E)));
+ return 1;
+ }
+ }
+
// If NumThreads is not specified, auto-detect a good default.
if (NumThreads == 0)
NumThreads =