[sanitizer] Improve FreeBSD ASLR detection
[llvm-project.git] / llvm / tools / llvm-cov / CoverageFilters.cpp
blobb7998647cc57e5c803e6a0a11ed94e8a42569f12
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-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // These classes provide filtering for function coverage mapping records.
11 //===----------------------------------------------------------------------===//
13 #include "CoverageFilters.h"
14 #include "CoverageSummaryInfo.h"
15 #include "llvm/Support/Regex.h"
16 #include "llvm/Support/SpecialCaseList.h"
18 using namespace llvm;
20 bool NameCoverageFilter::matches(
21 const coverage::CoverageMapping &,
22 const coverage::FunctionRecord &Function) const {
23 StringRef FuncName = Function.Name;
24 return FuncName.contains(Name);
27 bool NameRegexCoverageFilter::matches(
28 const coverage::CoverageMapping &,
29 const coverage::FunctionRecord &Function) const {
30 return llvm::Regex(Regex).match(Function.Name);
33 bool NameRegexCoverageFilter::matchesFilename(StringRef Filename) const {
34 return llvm::Regex(Regex).match(Filename);
37 bool NameAllowlistCoverageFilter::matches(
38 const coverage::CoverageMapping &,
39 const coverage::FunctionRecord &Function) const {
40 return Allowlist.inSection("llvmcov", "allowlist_fun", Function.Name);
43 // TODO: remove this when -name-whitelist option is removed.
44 bool NameWhitelistCoverageFilter::matches(
45 const coverage::CoverageMapping &,
46 const coverage::FunctionRecord &Function) const {
47 return Whitelist.inSection("llvmcov", "whitelist_fun", Function.Name);
50 bool RegionCoverageFilter::matches(
51 const coverage::CoverageMapping &CM,
52 const coverage::FunctionRecord &Function) const {
53 return PassesThreshold(FunctionCoverageSummary::get(CM, Function)
54 .RegionCoverage.getPercentCovered());
57 bool LineCoverageFilter::matches(
58 const coverage::CoverageMapping &CM,
59 const coverage::FunctionRecord &Function) const {
60 return PassesThreshold(FunctionCoverageSummary::get(CM, Function)
61 .LineCoverage.getPercentCovered());
64 void CoverageFilters::push_back(std::unique_ptr<CoverageFilter> Filter) {
65 Filters.push_back(std::move(Filter));
68 bool CoverageFilters::matches(const coverage::CoverageMapping &CM,
69 const coverage::FunctionRecord &Function) const {
70 for (const auto &Filter : Filters) {
71 if (Filter->matches(CM, Function))
72 return true;
74 return false;
77 bool CoverageFilters::matchesFilename(StringRef Filename) const {
78 for (const auto &Filter : Filters) {
79 if (Filter->matchesFilename(Filename))
80 return true;
82 return false;
85 bool CoverageFiltersMatchAll::matches(
86 const coverage::CoverageMapping &CM,
87 const coverage::FunctionRecord &Function) const {
88 for (const auto &Filter : Filters) {
89 if (!Filter->matches(CM, Function))
90 return false;
92 return true;