Coverage Report

Created: 2021-01-23 06:44

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/lib/Basic/Sanitizers.cpp
Line
Count
Source
1
//===- Sanitizers.cpp - C Language Family Language Options ----------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
//  This file defines the classes from Sanitizers.h
10
//
11
//===----------------------------------------------------------------------===//
12
13
#include "clang/Basic/Sanitizers.h"
14
#include "llvm/ADT/Hashing.h"
15
#include "llvm/ADT/StringSwitch.h"
16
17
using namespace clang;
18
19
// Once LLVM switches to C++17, the constexpr variables can be inline and we
20
// won't need this.
21
#define SANITIZER(NAME, ID) constexpr SanitizerMask SanitizerKind::ID;
22
#define SANITIZER_GROUP(NAME, ID, ALIAS)                                       \
23
  constexpr SanitizerMask SanitizerKind::ID;                                   \
24
  constexpr SanitizerMask SanitizerKind::ID##Group;
25
#include "clang/Basic/Sanitizers.def"
26
27
9.69k
SanitizerMask clang::parseSanitizerValue(StringRef Value, bool AllowGroups) {
28
9.69k
  SanitizerMask ParsedKind = llvm::StringSwitch<SanitizerMask>(Value)
29
532k
#define SANITIZER(NAME, ID) .Case(NAME, SanitizerKind::ID)
30
9.69k
#define SANITIZER_GROUP(NAME, ID, ALIAS)                                       \
31
106k
  .Case(NAME, AllowGroups ? 
SanitizerKind::ID91.8k
##Group :
SanitizerMask()14.7k
)
32
9.69k
#include "clang/Basic/Sanitizers.def"
33
9.69k
    .Default(SanitizerMask());
34
9.69k
  return ParsedKind;
35
9.69k
}
36
37
2.80k
SanitizerMask clang::expandSanitizerGroups(SanitizerMask Kinds) {
38
2.80k
#define SANITIZER(NAME, ID)
39
2.80k
#define SANITIZER_GROUP(NAME, ID, ALIAS)                                       \
40
30.8k
  if (Kinds & SanitizerKind::ID##Group)                                        \
41
1.14k
    Kinds |= SanitizerKind::ID;
42
2.80k
#include "clang/Basic/Sanitizers.def"
43
2.80k
  return Kinds;
44
2.80k
}
45
46
9
llvm::hash_code SanitizerMask::hash_value() const {
47
9
  return llvm::hash_combine_range(&maskLoToHigh[0], &maskLoToHigh[kNumElem]);
48
9
}
49
50
namespace clang {
51
9
llvm::hash_code hash_value(const clang::SanitizerMask &Arg) {
52
9
  return Arg.hash_value();
53
9
}
54
} // namespace clang