1176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines//===--- Sanitizers.cpp - C Language Family Language Options ----*- C++ -*-===//
2176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines//
3176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines//                     The LLVM Compiler Infrastructure
4176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines//
5176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// This file is distributed under the University of Illinois Open Source
6176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// License. See LICENSE.TXT for details.
7176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines//
8176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines//===----------------------------------------------------------------------===//
9176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines//
10176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines//  This file defines the classes from Sanitizers.h
11176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines//
12176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines//===----------------------------------------------------------------------===//
13176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#include "clang/Basic/Sanitizers.h"
14176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
15176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesusing namespace clang;
16176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
17176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesSanitizerSet::SanitizerSet() : Kinds(0) {}
18176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
19176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesbool SanitizerSet::has(SanitizerKind K) const {
20176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  unsigned Bit = static_cast<unsigned>(K);
21176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  return Kinds & (1 << Bit);
22176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}
23176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
24176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid SanitizerSet::set(SanitizerKind K, bool Value) {
25176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  unsigned Bit = static_cast<unsigned>(K);
26176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  Kinds = Value ? (Kinds | (1 << Bit)) : (Kinds & ~(1 << Bit));
27176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}
28176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
29176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid SanitizerSet::clear() {
30176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  Kinds = 0;
31176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}
32176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
33176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesbool SanitizerSet::empty() const {
34176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  return Kinds == 0;
35176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}
36