summaryrefslogtreecommitdiffstats
path: root/llvm/tools
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools')
-rw-r--r--llvm/tools/llvm-cov/CodeCoverage.cpp25
-rw-r--r--llvm/tools/llvm-cov/CoverageExporter.h2
-rw-r--r--llvm/tools/llvm-cov/CoverageExporterJson.cpp5
-rw-r--r--llvm/tools/llvm-cov/CoverageExporterJson.h2
-rw-r--r--llvm/tools/llvm-cov/CoverageExporterLcov.cpp5
-rw-r--r--llvm/tools/llvm-cov/CoverageExporterLcov.h2
-rw-r--r--llvm/tools/llvm-cov/CoverageFilters.cpp17
-rw-r--r--llvm/tools/llvm-cov/CoverageFilters.h16
-rw-r--r--llvm/tools/llvm-cov/CoverageReport.cpp6
-rw-r--r--llvm/tools/llvm-cov/CoverageReport.h2
10 files changed, 62 insertions, 20 deletions
diff --git a/llvm/tools/llvm-cov/CodeCoverage.cpp b/llvm/tools/llvm-cov/CodeCoverage.cpp
index 7151cfb032f..79c58450f0d 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;
- CoverageFilters IgnoreFilenameFilters;
+ FilenameCoverageFilters FilenameFilters;
/// 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 (!IgnoreFilenameFilters.matchesFilename(EffectivePath))
+ if (FilenameFilters.matchesFilename(EffectivePath))
SourceFiles.emplace_back(EffectivePath.str());
}
@@ -595,6 +595,12 @@ 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 "
@@ -744,10 +750,11 @@ int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) {
Filters.push_back(std::move(StatFilterer));
}
- // Create the ignore filename filters.
+ // Create the filename filters.
for (const auto &RE : IgnoreFilenameRegexFilters)
- IgnoreFilenameFilters.push_back(
- std::make_unique<NameRegexCoverageFilter>(RE));
+ FilenameFilters.blacklist(std::make_unique<NameRegexCoverageFilter>(RE));
+ for (const auto &RE : WhitelistFilenameRegexFilters)
+ FilenameFilters.whitelist(std::make_unique<NameRegexCoverageFilter>(RE));
if (!Arches.empty()) {
for (const std::string &Arch : Arches) {
@@ -763,7 +770,7 @@ int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) {
}
}
- // IgnoreFilenameFilters are applied even when InputSourceFiles specified.
+ // FilenameFilters are applied even when InputSourceFiles specified.
for (const std::string &File : InputSourceFiles)
collectPaths(File);
@@ -884,7 +891,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 (!IgnoreFilenameFilters.matchesFilename(Filename))
+ if (FilenameFilters.matchesFilename(Filename))
SourceFiles.push_back(Filename);
}
@@ -988,7 +995,7 @@ int CodeCoverageTool::doReport(int argc, const char **argv,
CoverageReport Report(ViewOpts, *Coverage.get());
if (!ShowFunctionSummaries) {
if (SourceFiles.empty())
- Report.renderFileReports(llvm::outs(), IgnoreFilenameFilters);
+ Report.renderFileReports(llvm::outs(), FilenameFilters);
else
Report.renderFileReports(llvm::outs(), SourceFiles);
} else {
@@ -1054,7 +1061,7 @@ int CodeCoverageTool::doExport(int argc, const char **argv,
}
if (SourceFiles.empty())
- Exporter->renderRoot(IgnoreFilenameFilters);
+ Exporter->renderRoot(FilenameFilters);
else
Exporter->renderRoot(SourceFiles);
diff --git a/llvm/tools/llvm-cov/CoverageExporter.h b/llvm/tools/llvm-cov/CoverageExporter.h
index 751e55dc091..03a7447e934 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 CoverageFilters &IgnoreFilters) = 0;
+ virtual void renderRoot(const FilenameCoverageFilters &FilenameFilters) = 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 181d428ed9d..204571b7ee8 100644
--- a/llvm/tools/llvm-cov/CoverageExporterJson.cpp
+++ b/llvm/tools/llvm-cov/CoverageExporterJson.cpp
@@ -190,10 +190,11 @@ json::Array renderFunctions(
} // end anonymous namespace
-void CoverageExporterJson::renderRoot(const CoverageFilters &IgnoreFilters) {
+void CoverageExporterJson::renderRoot(
+ const FilenameCoverageFilters &FilenameFilters) {
std::vector<std::string> SourceFiles;
for (StringRef SF : Coverage.getUniqueSourceFiles()) {
- if (!IgnoreFilters.matchesFilename(SF))
+ if (FilenameFilters.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 c1947500555..c0f4f5b4beb 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 CoverageFilters &IgnoreFilters) override;
+ void renderRoot(const FilenameCoverageFilters &FilenameFilters) 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 d9b0c3b0d7a..bc9dce85295 100644
--- a/llvm/tools/llvm-cov/CoverageExporterLcov.cpp
+++ b/llvm/tools/llvm-cov/CoverageExporterLcov.cpp
@@ -106,10 +106,11 @@ void renderFiles(raw_ostream &OS, const coverage::CoverageMapping &Coverage,
} // end anonymous namespace
-void CoverageExporterLcov::renderRoot(const CoverageFilters &IgnoreFilters) {
+void CoverageExporterLcov::renderRoot(
+ const FilenameCoverageFilters &FilenameFilters) {
std::vector<std::string> SourceFiles;
for (StringRef SF : Coverage.getUniqueSourceFiles()) {
- if (!IgnoreFilters.matchesFilename(SF))
+ if (FilenameFilters.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 e8a260bf493..0ffeb1111b8 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 CoverageFilters &IgnoreFilters) override;
+ void renderRoot(const FilenameCoverageFilters &FilenameFilters) 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 ca241e386e8..57d8d5e5be2 100644
--- a/llvm/tools/llvm-cov/CoverageFilters.cpp
+++ b/llvm/tools/llvm-cov/CoverageFilters.cpp
@@ -83,3 +83,20 @@ 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 ce56e160711..26f8fcc0a0d 100644
--- a/llvm/tools/llvm-cov/CoverageFilters.h
+++ b/llvm/tools/llvm-cov/CoverageFilters.h
@@ -152,6 +152,22 @@ 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 82259542c59..805e465f99c 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 CoverageFilters &IgnoreFilenameFilters) const {
+ raw_ostream &OS, const FilenameCoverageFilters &FilenameFilters) const {
std::vector<std::string> UniqueSourceFiles;
for (StringRef SF : Coverage.getUniqueSourceFiles()) {
- // Apply ignore source files filters.
- if (!IgnoreFilenameFilters.matchesFilename(SF))
+ // Apply source files filters.
+ if (FilenameFilters.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 f9a092f510b..7290586f0a0 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 CoverageFilters &IgnoreFilenameFilters) const;
+ const FilenameCoverageFilters &FilenameFilters) const;
/// Render file reports for the files specified in \p Files.
void renderFileReports(raw_ostream &OS, ArrayRef<std::string> Files) const;
OpenPOWER on IntegriCloud