diff options
-rw-r--r-- | llvm/docs/CommandGuide/llvm-cov.rst | 4 | ||||
-rw-r--r-- | llvm/test/tools/llvm-cov/whitelist-filename-regex.test | 88 | ||||
-rw-r--r-- | llvm/tools/llvm-cov/CodeCoverage.cpp | 25 | ||||
-rw-r--r-- | llvm/tools/llvm-cov/CoverageExporter.h | 2 | ||||
-rw-r--r-- | llvm/tools/llvm-cov/CoverageExporterJson.cpp | 5 | ||||
-rw-r--r-- | llvm/tools/llvm-cov/CoverageExporterJson.h | 2 | ||||
-rw-r--r-- | llvm/tools/llvm-cov/CoverageExporterLcov.cpp | 5 | ||||
-rw-r--r-- | llvm/tools/llvm-cov/CoverageExporterLcov.h | 2 | ||||
-rw-r--r-- | llvm/tools/llvm-cov/CoverageFilters.cpp | 17 | ||||
-rw-r--r-- | llvm/tools/llvm-cov/CoverageFilters.h | 16 | ||||
-rw-r--r-- | llvm/tools/llvm-cov/CoverageReport.cpp | 6 | ||||
-rw-r--r-- | llvm/tools/llvm-cov/CoverageReport.h | 2 |
12 files changed, 20 insertions, 154 deletions
diff --git a/llvm/docs/CommandGuide/llvm-cov.rst b/llvm/docs/CommandGuide/llvm-cov.rst index 9bc9f7edae2..08123e8cb78 100644 --- a/llvm/docs/CommandGuide/llvm-cov.rst +++ b/llvm/docs/CommandGuide/llvm-cov.rst @@ -259,10 +259,6 @@ OPTIONS Skip source code files with file paths that match the given regular expression. -.. option:: -whitelist-filename-regex=<PATTERN> - - Show code coverage only for files that match the given regular expression. - .. option:: -format=<FORMAT> Use the specified output format. The supported formats are: "text", "html". diff --git a/llvm/test/tools/llvm-cov/whitelist-filename-regex.test b/llvm/test/tools/llvm-cov/whitelist-filename-regex.test deleted file mode 100644 index 7039fb532f3..00000000000 --- a/llvm/test/tools/llvm-cov/whitelist-filename-regex.test +++ /dev/null @@ -1,88 +0,0 @@ -######################## -# Test "report" command. -######################## -# Only source files -RUN: llvm-cov report -instr-profile %S/Inputs/sources_specified/main.profdata \ -RUN: -path-equivalence=/tmp,%S/Inputs -whitelist-filename-regex='.*\.cc$' \ -RUN: %S/Inputs/sources_specified/main.covmapping \ -RUN: | FileCheck -check-prefix=REPORT_WHITELIST_SOURCE %s - -REPORT_WHITELIST_SOURCE-NOT: {{.*}}dec.h{{.*}} -REPORT_WHITELIST_SOURCE-NOT: {{.*}}inc.h{{.*}} -REPORT_WHITELIST_SOURCE-NOT: {{.*}}abs.h{{.*}} -REPORT_WHITELIST_SOURCE: {{.*}}main.cc{{.*}} -REPORT_WHITELIST_SOURCE: {{^}}TOTAL 1{{.*}}100.00%{{$}} - -# Whitelist all files from "extra" directory. -RUN: llvm-cov report -instr-profile %S/Inputs/sources_specified/main.profdata \ -RUN: -path-equivalence=/tmp,%S/Inputs -whitelist-filename-regex='.*extra[/\\].*' \ -RUN: %S/Inputs/sources_specified/main.covmapping \ -RUN: | FileCheck -check-prefix=REPORT_WHITELIST_DIR %s - -REPORT_WHITELIST_DIR: {{.*}}dec.h{{.*}} -REPORT_WHITELIST_DIR: {{.*}}inc.h{{.*}} -REPORT_WHITELIST_DIR-NOT: {{.*}}abs.h{{.*}} -REPORT_WHITELIST_DIR-NOT: {{.*}}main.cc{{.*}} -REPORT_WHITELIST_DIR: {{^}}TOTAL 2{{.*}}50.00%{{$}} - -# Whitelist ignored files -RUN: llvm-cov report -instr-profile %S/Inputs/sources_specified/main.profdata \ -RUN: -path-equivalence=/tmp,%S/Inputs \ -RUN: -ignore-filename-regex='.*' -whitelist-filename-regex='.*' \ -RUN: %S/Inputs/sources_specified/main.covmapping \ -RUN: | FileCheck -check-prefix=REPORT_WHITELIST_IGNORED %s - -REPORT_WHITELIST_IGNORED-NOT: {{.*}}dec.h{{.*}} -REPORT_WHITELIST_IGNORED-NOT: {{.*}}inc.h{{.*}} -REPORT_WHITELIST_IGNORED-NOT: {{.*}}abs.h{{.*}} -REPORT_WHITELIST_IGNORED-NOT: {{.*}}main.cc{{.*}} -REPORT_WHITELIST_IGNORED-NOT: {{^}}TOTAL 0{{.*}}0.00%{{$}} - -# Whitelist all files from "extra" directory even when SOURCES specified. -RUN: llvm-cov report -instr-profile %S/Inputs/sources_specified/main.profdata \ -RUN: -path-equivalence=/tmp,%S/Inputs -whitelist-filename-regex='.*extra[/\\].*' \ -RUN: %S/Inputs/sources_specified/main.covmapping \ -RUN: %S/Inputs/sources_specified/extra %S/Inputs/sources_specified/abs.h \ -RUN: | FileCheck -check-prefix=REPORT_WHITELIST_DIR_WITH_SOURCES %s - -REPORT_WHITELIST_DIR_WITH_SOURCES: {{.*}}dec.h{{.*}} -REPORT_WHITELIST_DIR_WITH_SOURCES: {{.*}}inc.h{{.*}} -REPORT_WHITELIST_DIR_WITH_SOURCES-NOT: {{.*}}abs.h{{.*}} -REPORT_WHITELIST_DIR_WITH_SOURCES-NOT: {{.*}}main.cc{{.*}} -REPORT_WHITELIST_DIR_WITH_SOURCES: {{^}}TOTAL 2{{.*}}50.00%{{$}} - -######################## -# Test "show" command. -######################## -# Whitelist a couple files -RUN: llvm-cov show -instr-profile %S/Inputs/sources_specified/main.profdata \ -RUN: -path-equivalence=/tmp,%S/Inputs \ -RUN: -whitelist-filename-regex='.*\.cc$' -whitelist-filename-regex='.*abs\.h$' \ -RUN: %S/Inputs/sources_specified/main.covmapping \ -RUN: | FileCheck -check-prefix=SHOW_WHITELIST_CC %s - -# Order of files may differ, check that there are 3 files and not abs.h. -SHOW_IGNORE_CC-NOT: {{.*}}main.cc{{.*}} - -SHOW_WHITELIST_CC-NOT: {{.*}}dec.h{{.*}} -SHOW_WHITELIST_CC-NOT: {{.*}}inc.h{{.*}} -SHOW_WHITELIST_CC: {{.*}}sources_specified{{.*}} -SHOW_WHITELIST_CC: {{.*}}sources_specified{{.*}} - -######################## -# Test "export" command. -######################## -# Use a temp .json file as output in a single line. Whitelist headers that have -# an 'a' follow by 2 chars followed by '.h'. -RUN: llvm-cov export -instr-profile %S/Inputs/sources_specified/main.profdata \ -RUN: -path-equivalence=/tmp,%S/Inputs -whitelist-filename-regex='.*a..\.h$' \ -RUN: %S/Inputs/sources_specified/main.covmapping \ -RUN: > %t.export.json - -RUN: FileCheck -check-prefix=NO-EXPORT_WHITELIST_3_SYMBOLS_H %s < %t.export.json -RUN: FileCheck -check-prefix=EXPORT_WHITELIST_3_SYMBOLS_H %s < %t.export.json - -NO-EXPORT_WHITELIST_3_SYMBOLS_H-NOT: {{"filename":"(/|\\\\)tmp(/|\\\\)sources_specified(/|\\\\)inc.h"}} -NO-EXPORT_WHITELIST_3_SYMBOLS_H-NOT: {{"filename":"(/|\\\\)tmp(/|\\\\)sources_specified(/|\\\\)dec.h"}} -NO-EXPORT_WHITELIST_3_SYMBOLS_H-NOT: {{"filename":"(/|\\\\)tmp(/|\\\\)sources_specified(/|\\\\)main.cc"}} -EXPORT_WHITELIST_3_SYMBOLS_H: {{"filename":"(/|\\\\)tmp(/|\\\\)sources_specified(/|\\\\)abs.h"}} diff --git a/llvm/tools/llvm-cov/CodeCoverage.cpp b/llvm/tools/llvm-cov/CodeCoverage.cpp index 79c58450f0d..7151cfb032f 100644 --- a/llvm/tools/llvm-cov/CodeCoverage.cpp +++ b/llvm/tools/llvm-cov/CodeCoverage.cpp @@ -126,7 +126,7 @@ private: std::vector<StringRef> ObjectFilenames; CoverageViewOptions ViewOpts; CoverageFiltersMatchAll Filters; - FilenameCoverageFilters FilenameFilters; + CoverageFilters IgnoreFilenameFilters; /// The path to the indexed profile. std::string PGOFilename; @@ -190,7 +190,7 @@ void CodeCoverageTool::addCollectedPath(const std::string &Path) { return; } sys::path::remove_dots(EffectivePath, /*remove_dot_dots=*/true); - if (FilenameFilters.matchesFilename(EffectivePath)) + if (!IgnoreFilenameFilters.matchesFilename(EffectivePath)) SourceFiles.emplace_back(EffectivePath.str()); } @@ -595,12 +595,6 @@ int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) { "regular expression"), cl::ZeroOrMore, cl::cat(FilteringCategory)); - cl::list<std::string> WhitelistFilenameRegexFilters( - "whitelist-filename-regex", cl::Optional, - cl::desc("Show code coverage only for file paths that match the given " - "regular expression"), - cl::ZeroOrMore, cl::cat(FilteringCategory)); - cl::list<std::string> IgnoreFilenameRegexFilters( "ignore-filename-regex", cl::Optional, cl::desc("Skip source code files with file paths that match the given " @@ -750,11 +744,10 @@ int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) { Filters.push_back(std::move(StatFilterer)); } - // Create the filename filters. + // Create the ignore filename filters. for (const auto &RE : IgnoreFilenameRegexFilters) - FilenameFilters.blacklist(std::make_unique<NameRegexCoverageFilter>(RE)); - for (const auto &RE : WhitelistFilenameRegexFilters) - FilenameFilters.whitelist(std::make_unique<NameRegexCoverageFilter>(RE)); + IgnoreFilenameFilters.push_back( + std::make_unique<NameRegexCoverageFilter>(RE)); if (!Arches.empty()) { for (const std::string &Arch : Arches) { @@ -770,7 +763,7 @@ int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) { } } - // FilenameFilters are applied even when InputSourceFiles specified. + // IgnoreFilenameFilters are applied even when InputSourceFiles specified. for (const std::string &File : InputSourceFiles) collectPaths(File); @@ -891,7 +884,7 @@ int CodeCoverageTool::doShow(int argc, const char **argv, if (SourceFiles.empty()) // Get the source files from the function coverage mapping. for (StringRef Filename : Coverage->getUniqueSourceFiles()) { - if (FilenameFilters.matchesFilename(Filename)) + if (!IgnoreFilenameFilters.matchesFilename(Filename)) SourceFiles.push_back(Filename); } @@ -995,7 +988,7 @@ int CodeCoverageTool::doReport(int argc, const char **argv, CoverageReport Report(ViewOpts, *Coverage.get()); if (!ShowFunctionSummaries) { if (SourceFiles.empty()) - Report.renderFileReports(llvm::outs(), FilenameFilters); + Report.renderFileReports(llvm::outs(), IgnoreFilenameFilters); else Report.renderFileReports(llvm::outs(), SourceFiles); } else { @@ -1061,7 +1054,7 @@ int CodeCoverageTool::doExport(int argc, const char **argv, } if (SourceFiles.empty()) - Exporter->renderRoot(FilenameFilters); + Exporter->renderRoot(IgnoreFilenameFilters); else Exporter->renderRoot(SourceFiles); diff --git a/llvm/tools/llvm-cov/CoverageExporter.h b/llvm/tools/llvm-cov/CoverageExporter.h index 03a7447e934..751e55dc091 100644 --- a/llvm/tools/llvm-cov/CoverageExporter.h +++ b/llvm/tools/llvm-cov/CoverageExporter.h @@ -40,7 +40,7 @@ public: virtual ~CoverageExporter(){}; /// Render the CoverageMapping object. - virtual void renderRoot(const FilenameCoverageFilters &FilenameFilters) = 0; + virtual void renderRoot(const CoverageFilters &IgnoreFilters) = 0; /// Render the CoverageMapping object for specified source files. virtual void renderRoot(ArrayRef<std::string> SourceFiles) = 0; diff --git a/llvm/tools/llvm-cov/CoverageExporterJson.cpp b/llvm/tools/llvm-cov/CoverageExporterJson.cpp index 204571b7ee8..181d428ed9d 100644 --- a/llvm/tools/llvm-cov/CoverageExporterJson.cpp +++ b/llvm/tools/llvm-cov/CoverageExporterJson.cpp @@ -190,11 +190,10 @@ json::Array renderFunctions( } // end anonymous namespace -void CoverageExporterJson::renderRoot( - const FilenameCoverageFilters &FilenameFilters) { +void CoverageExporterJson::renderRoot(const CoverageFilters &IgnoreFilters) { std::vector<std::string> SourceFiles; for (StringRef SF : Coverage.getUniqueSourceFiles()) { - if (FilenameFilters.matchesFilename(SF)) + if (!IgnoreFilters.matchesFilename(SF)) SourceFiles.emplace_back(SF); } renderRoot(SourceFiles); diff --git a/llvm/tools/llvm-cov/CoverageExporterJson.h b/llvm/tools/llvm-cov/CoverageExporterJson.h index c0f4f5b4beb..c1947500555 100644 --- a/llvm/tools/llvm-cov/CoverageExporterJson.h +++ b/llvm/tools/llvm-cov/CoverageExporterJson.h @@ -24,7 +24,7 @@ public: : CoverageExporter(CoverageMapping, Options, OS) {} /// Render the CoverageMapping object. - void renderRoot(const FilenameCoverageFilters &FilenameFilters) override; + void renderRoot(const CoverageFilters &IgnoreFilters) override; /// Render the CoverageMapping object for specified source files. void renderRoot(ArrayRef<std::string> SourceFiles) override; diff --git a/llvm/tools/llvm-cov/CoverageExporterLcov.cpp b/llvm/tools/llvm-cov/CoverageExporterLcov.cpp index bc9dce85295..d9b0c3b0d7a 100644 --- a/llvm/tools/llvm-cov/CoverageExporterLcov.cpp +++ b/llvm/tools/llvm-cov/CoverageExporterLcov.cpp @@ -106,11 +106,10 @@ void renderFiles(raw_ostream &OS, const coverage::CoverageMapping &Coverage, } // end anonymous namespace -void CoverageExporterLcov::renderRoot( - const FilenameCoverageFilters &FilenameFilters) { +void CoverageExporterLcov::renderRoot(const CoverageFilters &IgnoreFilters) { std::vector<std::string> SourceFiles; for (StringRef SF : Coverage.getUniqueSourceFiles()) { - if (FilenameFilters.matchesFilename(SF)) + if (!IgnoreFilters.matchesFilename(SF)) SourceFiles.emplace_back(SF); } renderRoot(SourceFiles); diff --git a/llvm/tools/llvm-cov/CoverageExporterLcov.h b/llvm/tools/llvm-cov/CoverageExporterLcov.h index 0ffeb1111b8..e8a260bf493 100644 --- a/llvm/tools/llvm-cov/CoverageExporterLcov.h +++ b/llvm/tools/llvm-cov/CoverageExporterLcov.h @@ -24,7 +24,7 @@ public: : CoverageExporter(CoverageMapping, Options, OS) {} /// Render the CoverageMapping object. - void renderRoot(const FilenameCoverageFilters &FilenameFilters) override; + void renderRoot(const CoverageFilters &IgnoreFilters) override; /// Render the CoverageMapping object for specified source files. void renderRoot(ArrayRef<std::string> SourceFiles) override; diff --git a/llvm/tools/llvm-cov/CoverageFilters.cpp b/llvm/tools/llvm-cov/CoverageFilters.cpp index 57d8d5e5be2..ca241e386e8 100644 --- a/llvm/tools/llvm-cov/CoverageFilters.cpp +++ b/llvm/tools/llvm-cov/CoverageFilters.cpp @@ -83,20 +83,3 @@ bool CoverageFiltersMatchAll::matches( } return true; } - -bool FilenameCoverageFilters::matchesFilename(StringRef Filename) const { - if (!Whitelist.empty() && !Whitelist.matchesFilename(Filename)) { - return false; - } - return !Blacklist.matchesFilename(Filename); -} - -void FilenameCoverageFilters::whitelist( - std::unique_ptr<CoverageFilter> Filter) { - Whitelist.push_back(std::move(Filter)); -} - -void FilenameCoverageFilters::blacklist( - std::unique_ptr<CoverageFilter> Filter) { - Blacklist.push_back(std::move(Filter)); -} diff --git a/llvm/tools/llvm-cov/CoverageFilters.h b/llvm/tools/llvm-cov/CoverageFilters.h index 26f8fcc0a0d..ce56e160711 100644 --- a/llvm/tools/llvm-cov/CoverageFilters.h +++ b/llvm/tools/llvm-cov/CoverageFilters.h @@ -152,22 +152,6 @@ public: const coverage::FunctionRecord &Function) const override; }; -/// A collection of filters. -/// Matches filenames that are whitelisted and not blacklisted. -class FilenameCoverageFilters : public CoverageFilter { -protected: - CoverageFilters Whitelist; - CoverageFilters Blacklist; - -public: - - void whitelist(std::unique_ptr<CoverageFilter> Filter); - void blacklist(std::unique_ptr<CoverageFilter> Filter); - - bool matchesFilename(StringRef Filename) const override; -}; - - } // namespace llvm #endif // LLVM_COV_COVERAGEFILTERS_H diff --git a/llvm/tools/llvm-cov/CoverageReport.cpp b/llvm/tools/llvm-cov/CoverageReport.cpp index 805e465f99c..82259542c59 100644 --- a/llvm/tools/llvm-cov/CoverageReport.cpp +++ b/llvm/tools/llvm-cov/CoverageReport.cpp @@ -379,11 +379,11 @@ std::vector<FileCoverageSummary> CoverageReport::prepareFileReports( } void CoverageReport::renderFileReports( - raw_ostream &OS, const FilenameCoverageFilters &FilenameFilters) const { + raw_ostream &OS, const CoverageFilters &IgnoreFilenameFilters) const { std::vector<std::string> UniqueSourceFiles; for (StringRef SF : Coverage.getUniqueSourceFiles()) { - // Apply source files filters. - if (FilenameFilters.matchesFilename(SF)) + // Apply ignore source files filters. + if (!IgnoreFilenameFilters.matchesFilename(SF)) UniqueSourceFiles.emplace_back(SF.str()); } renderFileReports(OS, UniqueSourceFiles); diff --git a/llvm/tools/llvm-cov/CoverageReport.h b/llvm/tools/llvm-cov/CoverageReport.h index 7290586f0a0..f9a092f510b 100644 --- a/llvm/tools/llvm-cov/CoverageReport.h +++ b/llvm/tools/llvm-cov/CoverageReport.h @@ -53,7 +53,7 @@ public: /// Render file reports for every unique file in the coverage mapping. void renderFileReports(raw_ostream &OS, - const FilenameCoverageFilters &FilenameFilters) const; + const CoverageFilters &IgnoreFilenameFilters) const; /// Render file reports for the files specified in \p Files. void renderFileReports(raw_ostream &OS, ArrayRef<std::string> Files) const; |