Clang Project

clang_source_code/include/clang/Basic/SanitizerSpecialCaseList.h
1//===--- SanitizerSpecialCaseList.h - SCL for sanitizers --------*- C++ -*-===//
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// An extension of SpecialCaseList to allowing querying sections by
10// SanitizerMask.
11//
12//===----------------------------------------------------------------------===//
13#ifndef LLVM_CLANG_BASIC_SANITIZERSPECIALCASELIST_H
14#define LLVM_CLANG_BASIC_SANITIZERSPECIALCASELIST_H
15
16#include "clang/Basic/LLVM.h"
17#include "clang/Basic/Sanitizers.h"
18#include "llvm/ADT/StringRef.h"
19#include "llvm/Support/SpecialCaseList.h"
20#include <memory>
21
22namespace clang {
23
24class SanitizerSpecialCaseList : public llvm::SpecialCaseList {
25public:
26  static std::unique_ptr<SanitizerSpecialCaseList>
27  create(const std::vector<std::string> &Pathsstd::string &Error);
28
29  static std::unique_ptr<SanitizerSpecialCaseList>
30  createOrDie(const std::vector<std::string> &Paths);
31
32  // Query blacklisted entries if any bit in Mask matches the entry's section.
33  bool inSection(SanitizerMask MaskStringRef PrefixStringRef Query,
34                 StringRef Category = StringRef()) const;
35
36protected:
37  // Initialize SanitizerSections.
38  void createSanitizerSections();
39
40  struct SanitizerSection {
41    SanitizerSection(SanitizerMask SM, SectionEntries &E)
42        : Mask(SM), Entries(E){};
43
44    SanitizerMask Mask;
45    SectionEntries &Entries;
46  };
47
48  std::vector<SanitizerSectionSanitizerSections;
49};
50
51// end namespace clang
52
53#endif
54
clang::SanitizerSpecialCaseList::create
clang::SanitizerSpecialCaseList::createOrDie
clang::SanitizerSpecialCaseList::inSection
clang::SanitizerSpecialCaseList::createSanitizerSections
clang::SanitizerSpecialCaseList::SanitizerSection
clang::SanitizerSpecialCaseList::SanitizerSection::Mask
clang::SanitizerSpecialCaseList::SanitizerSection::Entries
clang::SanitizerSpecialCaseList::SanitizerSections
clang::SanitizerSpecialCaseList::create
clang::SanitizerSpecialCaseList::createOrDie