87 lines · cpp
1//===- CoverageFilters.cpp - Function coverage mapping filters ------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// These classes provide filtering for function coverage mapping records.10//11//===----------------------------------------------------------------------===//12 13#include "CoverageFilters.h"14#include "CoverageSummaryInfo.h"15#include "llvm/Support/Regex.h"16#include "llvm/Support/SpecialCaseList.h"17 18using namespace llvm;19 20bool NameCoverageFilter::matches(21 const coverage::CoverageMapping &,22 const coverage::FunctionRecord &Function) const {23 StringRef FuncName = Function.Name;24 return FuncName.contains(Name);25}26 27bool NameRegexCoverageFilter::matches(28 const coverage::CoverageMapping &,29 const coverage::FunctionRecord &Function) const {30 return llvm::Regex(Regex).match(Function.Name);31}32 33bool NameRegexCoverageFilter::matchesFilename(StringRef Filename) const {34 return llvm::Regex(Regex).match(Filename);35}36 37bool NameAllowlistCoverageFilter::matches(38 const coverage::CoverageMapping &,39 const coverage::FunctionRecord &Function) const {40 return Allowlist.inSection("llvmcov", "allowlist_fun", Function.Name);41}42 43bool RegionCoverageFilter::matches(44 const coverage::CoverageMapping &CM,45 const coverage::FunctionRecord &Function) const {46 return PassesThreshold(FunctionCoverageSummary::get(CM, Function)47 .RegionCoverage.getPercentCovered());48}49 50bool LineCoverageFilter::matches(51 const coverage::CoverageMapping &CM,52 const coverage::FunctionRecord &Function) const {53 return PassesThreshold(FunctionCoverageSummary::get(CM, Function)54 .LineCoverage.getPercentCovered());55}56 57void CoverageFilters::push_back(std::unique_ptr<CoverageFilter> Filter) {58 Filters.push_back(std::move(Filter));59}60 61bool CoverageFilters::matches(const coverage::CoverageMapping &CM,62 const coverage::FunctionRecord &Function) const {63 for (const auto &Filter : Filters) {64 if (Filter->matches(CM, Function))65 return true;66 }67 return false;68}69 70bool CoverageFilters::matchesFilename(StringRef Filename) const {71 for (const auto &Filter : Filters) {72 if (Filter->matchesFilename(Filename))73 return true;74 }75 return false;76}77 78bool CoverageFiltersMatchAll::matches(79 const coverage::CoverageMapping &CM,80 const coverage::FunctionRecord &Function) const {81 for (const auto &Filter : Filters) {82 if (!Filter->matches(CM, Function))83 return false;84 }85 return true;86}87