brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · bc1ddb4 Raw
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