xref: /aosp_15_r20/external/clang/lib/Basic/Sanitizers.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li //===--- Sanitizers.cpp - C Language Family Language Options ----*- C++ -*-===//
2*67e74705SXin Li //
3*67e74705SXin Li //                     The LLVM Compiler Infrastructure
4*67e74705SXin Li //
5*67e74705SXin Li // This file is distributed under the University of Illinois Open Source
6*67e74705SXin Li // License. See LICENSE.TXT for details.
7*67e74705SXin Li //
8*67e74705SXin Li //===----------------------------------------------------------------------===//
9*67e74705SXin Li //
10*67e74705SXin Li //  This file defines the classes from Sanitizers.h
11*67e74705SXin Li //
12*67e74705SXin Li //===----------------------------------------------------------------------===//
13*67e74705SXin Li #include "clang/Basic/Sanitizers.h"
14*67e74705SXin Li #include "clang/Basic/LLVM.h"
15*67e74705SXin Li #include "llvm/ADT/StringRef.h"
16*67e74705SXin Li #include "llvm/ADT/StringSwitch.h"
17*67e74705SXin Li 
18*67e74705SXin Li using namespace clang;
19*67e74705SXin Li 
parseSanitizerValue(StringRef Value,bool AllowGroups)20*67e74705SXin Li SanitizerMask clang::parseSanitizerValue(StringRef Value, bool AllowGroups) {
21*67e74705SXin Li   SanitizerMask ParsedKind = llvm::StringSwitch<SanitizerMask>(Value)
22*67e74705SXin Li #define SANITIZER(NAME, ID) .Case(NAME, SanitizerKind::ID)
23*67e74705SXin Li #define SANITIZER_GROUP(NAME, ID, ALIAS)                                       \
24*67e74705SXin Li   .Case(NAME, AllowGroups ? SanitizerKind::ID##Group : 0)
25*67e74705SXin Li #include "clang/Basic/Sanitizers.def"
26*67e74705SXin Li     .Default(0);
27*67e74705SXin Li   return ParsedKind;
28*67e74705SXin Li }
29*67e74705SXin Li 
expandSanitizerGroups(SanitizerMask Kinds)30*67e74705SXin Li SanitizerMask clang::expandSanitizerGroups(SanitizerMask Kinds) {
31*67e74705SXin Li #define SANITIZER(NAME, ID)
32*67e74705SXin Li #define SANITIZER_GROUP(NAME, ID, ALIAS)                                       \
33*67e74705SXin Li   if (Kinds & SanitizerKind::ID##Group)                                        \
34*67e74705SXin Li     Kinds |= SanitizerKind::ID;
35*67e74705SXin Li #include "clang/Basic/Sanitizers.def"
36*67e74705SXin Li   return Kinds;
37*67e74705SXin Li }
38