123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- //===- Sanitizers.cpp - C Language Family Language Options ----------------===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // This file defines the classes from Sanitizers.h
- //
- //===----------------------------------------------------------------------===//
- #include "clang/Basic/Sanitizers.h"
- #include "llvm/ADT/Hashing.h"
- #include "llvm/ADT/StringSwitch.h"
- using namespace clang;
- // Once LLVM switches to C++17, the constexpr variables can be inline and we
- // won't need this.
- #define SANITIZER(NAME, ID) constexpr SanitizerMask SanitizerKind::ID;
- #define SANITIZER_GROUP(NAME, ID, ALIAS) \
- constexpr SanitizerMask SanitizerKind::ID; \
- constexpr SanitizerMask SanitizerKind::ID##Group;
- #include "clang/Basic/Sanitizers.def"
- SanitizerMask clang::parseSanitizerValue(StringRef Value, bool AllowGroups) {
- SanitizerMask ParsedKind = llvm::StringSwitch<SanitizerMask>(Value)
- #define SANITIZER(NAME, ID) .Case(NAME, SanitizerKind::ID)
- #define SANITIZER_GROUP(NAME, ID, ALIAS) \
- .Case(NAME, AllowGroups ? SanitizerKind::ID##Group : SanitizerMask())
- #include "clang/Basic/Sanitizers.def"
- .Default(SanitizerMask());
- return ParsedKind;
- }
- SanitizerMask clang::expandSanitizerGroups(SanitizerMask Kinds) {
- #define SANITIZER(NAME, ID)
- #define SANITIZER_GROUP(NAME, ID, ALIAS) \
- if (Kinds & SanitizerKind::ID##Group) \
- Kinds |= SanitizerKind::ID;
- #include "clang/Basic/Sanitizers.def"
- return Kinds;
- }
- llvm::hash_code SanitizerMask::hash_value() const {
- return llvm::hash_combine_range(&maskLoToHigh[0], &maskLoToHigh[kNumElem]);
- }
- namespace clang {
- llvm::hash_code hash_value(const clang::SanitizerMask &Arg) {
- return Arg.hash_value();
- }
- } // namespace clang
|