diff options
author | Sean Eveson <eveson.sean@gmail.com> | 2017-09-27 16:20:07 +0000 |
---|---|---|
committer | Sean Eveson <eveson.sean@gmail.com> | 2017-09-27 16:20:07 +0000 |
commit | 950974fdb5b254e8b79390d0ba844462d68474de (patch) | |
tree | 2cd727d3892c2d0d7894e8a503dc2b56b65428fe /tools/llvm-cov/CodeCoverage.cpp | |
parent | 13e889d253cc0ebc982da3ef400e7ed3396aaf0a (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.cpp | 77 |
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 = |