1ef8225444452a1486bd721f3285301fe84643b00Stephen Hines//===--- SanitizerBlacklist.h - Blacklist for sanitizers --------*- C++ -*-===//
2ef8225444452a1486bd721f3285301fe84643b00Stephen Hines//
3ef8225444452a1486bd721f3285301fe84643b00Stephen Hines//                     The LLVM Compiler Infrastructure
4ef8225444452a1486bd721f3285301fe84643b00Stephen Hines//
5ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// This file is distributed under the University of Illinois Open Source
6ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// License. See LICENSE.TXT for details.
7ef8225444452a1486bd721f3285301fe84643b00Stephen Hines//
8ef8225444452a1486bd721f3285301fe84643b00Stephen Hines//===----------------------------------------------------------------------===//
9ef8225444452a1486bd721f3285301fe84643b00Stephen Hines//
10ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// User-provided blacklist used to disable/alter instrumentation done in
11ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// sanitizers.
12ef8225444452a1486bd721f3285301fe84643b00Stephen Hines//
13ef8225444452a1486bd721f3285301fe84643b00Stephen Hines//===----------------------------------------------------------------------===//
14ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#ifndef CLANG_CODEGEN_SANITIZERBLACKLIST_H
15ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define CLANG_CODEGEN_SANITIZERBLACKLIST_H
16ef8225444452a1486bd721f3285301fe84643b00Stephen Hines
17ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#include "clang/Basic/LLVM.h"
18ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#include "llvm/ADT/StringRef.h"
19ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#include "llvm/Support/SpecialCaseList.h"
20ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#include <memory>
21ef8225444452a1486bd721f3285301fe84643b00Stephen Hines
22ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesnamespace llvm {
23ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesclass GlobalVariable;
24ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesclass Function;
25ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesclass Module;
26ef8225444452a1486bd721f3285301fe84643b00Stephen Hines}
27ef8225444452a1486bd721f3285301fe84643b00Stephen Hines
28ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesnamespace clang {
29ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesnamespace CodeGen {
30ef8225444452a1486bd721f3285301fe84643b00Stephen Hines
31ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesclass SanitizerBlacklist {
32ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  std::unique_ptr<llvm::SpecialCaseList> SCL;
33ef8225444452a1486bd721f3285301fe84643b00Stephen Hines
34ef8225444452a1486bd721f3285301fe84643b00Stephen Hinespublic:
35ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  SanitizerBlacklist(llvm::SpecialCaseList *SCL) : SCL(SCL) {}
36ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  bool isIn(const llvm::Module &M,
37ef8225444452a1486bd721f3285301fe84643b00Stephen Hines            const StringRef Category = StringRef()) const;
38ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  bool isIn(const llvm::Function &F) const;
39ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  bool isIn(const llvm::GlobalVariable &G,
40ef8225444452a1486bd721f3285301fe84643b00Stephen Hines            const StringRef Category = StringRef()) const;
41ef8225444452a1486bd721f3285301fe84643b00Stephen Hines};
42ef8225444452a1486bd721f3285301fe84643b00Stephen Hines}  // end namespace CodeGen
43ef8225444452a1486bd721f3285301fe84643b00Stephen Hines}  // end namespace clang
44ef8225444452a1486bd721f3285301fe84643b00Stephen Hines
45ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#endif
46