//===- 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 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; }