diff options
Diffstat (limited to 'tools/llvm-cov/CoverageFilters.cpp')
-rw-r--r-- | tools/llvm-cov/CoverageFilters.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/tools/llvm-cov/CoverageFilters.cpp b/tools/llvm-cov/CoverageFilters.cpp new file mode 100644 index 0000000..325dd72 --- /dev/null +++ b/tools/llvm-cov/CoverageFilters.cpp @@ -0,0 +1,59 @@ +//===- CoverageFilters.cpp - Function coverage mapping filters ------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// These classes provide filtering for function coverage mapping records. +// +//===----------------------------------------------------------------------===// + +#include "CoverageFilters.h" +#include "CoverageSummaryInfo.h" +#include "llvm/Support/Regex.h" + +using namespace llvm; + +bool NameCoverageFilter::matches(const coverage::FunctionRecord &Function) { + StringRef FuncName = Function.Name; + return FuncName.find(Name) != StringRef::npos; +} + +bool +NameRegexCoverageFilter::matches(const coverage::FunctionRecord &Function) { + return llvm::Regex(Regex).match(Function.Name); +} + +bool RegionCoverageFilter::matches(const coverage::FunctionRecord &Function) { + return PassesThreshold(FunctionCoverageSummary::get(Function) + .RegionCoverage.getPercentCovered()); +} + +bool LineCoverageFilter::matches(const coverage::FunctionRecord &Function) { + return PassesThreshold( + FunctionCoverageSummary::get(Function).LineCoverage.getPercentCovered()); +} + +void CoverageFilters::push_back(std::unique_ptr<CoverageFilter> Filter) { + Filters.push_back(std::move(Filter)); +} + +bool CoverageFilters::matches(const coverage::FunctionRecord &Function) { + for (const auto &Filter : Filters) { + if (Filter->matches(Function)) + return true; + } + return false; +} + +bool +CoverageFiltersMatchAll::matches(const coverage::FunctionRecord &Function) { + for (const auto &Filter : Filters) { + if (!Filter->matches(Function)) + return false; + } + return true; +} |