15 #ifndef LLVM_CLANG_BASIC_SANITIZERS_H 16 #define LLVM_CLANG_BASIC_SANITIZERS_H 19 #include "llvm/ADT/StringRef.h" 20 #include "llvm/Support/MathExtras.h" 26 namespace SanitizerKind {
31 #define SANITIZER(NAME, ID) SO_##ID, 32 #define SANITIZER_GROUP(NAME, ID, ALIAS) SO_##ID##Group, 33 #include "clang/Basic/Sanitizers.def" 39 #define SANITIZER(NAME, ID) \ 40 const SanitizerMask ID = 1ULL << SO_##ID; 41 #define SANITIZER_GROUP(NAME, ID, ALIAS) \ 42 const SanitizerMask ID = ALIAS; \ 43 const SanitizerMask ID##Group = 1ULL << SO_##ID##Group; 44 #include "clang/Basic/Sanitizers.def" 50 bool has(SanitizerMask K)
const {
51 assert(llvm::isPowerOf2_64(K));
56 bool hasOneOf(SanitizerMask K)
const {
return Mask & K; }
59 void set(SanitizerMask K,
bool Value) {
60 assert(llvm::isPowerOf2_64(K));
61 Mask =
Value ? (Mask | K) : (Mask & ~K);
65 void clear(SanitizerMask K = SanitizerKind::All) { Mask &= ~K; }
68 bool empty()
const {
return Mask == 0; }
71 SanitizerMask Mask = 0;
84 return SanitizerKind::CFI | SanitizerKind::Integer |
bool hasOneOf(SanitizerMask K) const
Check if one or more sanitizers are enabled.
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified...
void clear(SanitizerMask K=SanitizerKind::All)
Disable the sanitizers specified in K.
SanitizerMask getPPTransparentSanitizers()
Return the sanitizers which do not affect preprocessing.
Dataflow Directional Tag Classes.
bool empty() const
Returns true if at least one sanitizer is enabled.
SanitizerMask parseSanitizerValue(StringRef Value, bool AllowGroups)
Parse a single value from a -fsanitize= or -fno-sanitize= value list.
SanitizerMask expandSanitizerGroups(SanitizerMask Kinds)
For each sanitizer group bit set in Kinds, set the bits for sanitizers this group enables...
bool has(SanitizerMask K) const
Check if a certain (single) sanitizer is enabled.