1 //===--- NoSanitizeList.cpp - Ignored list for sanitizers ----------------===//
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
7 //===----------------------------------------------------------------------===//
9 // User-provided ignore-list used to disable/alter instrumentation done in
12 //===----------------------------------------------------------------------===//
14 #include "clang/Basic/NoSanitizeList.h"
15 #include "clang/Basic/FileManager.h"
16 #include "clang/Basic/SanitizerSpecialCaseList.h"
17 #include "clang/Basic/Sanitizers.h"
18 #include "clang/Basic/SourceManager.h"
20 using namespace clang
;
22 NoSanitizeList::NoSanitizeList(const std::vector
<std::string
> &NoSanitizePaths
,
24 : SSCL(SanitizerSpecialCaseList::createOrDie(
25 NoSanitizePaths
, SM
.getFileManager().getVirtualFileSystem())),
28 NoSanitizeList::~NoSanitizeList() = default;
30 bool NoSanitizeList::containsGlobal(SanitizerMask Mask
, StringRef GlobalName
,
31 StringRef Category
) const {
32 return SSCL
->inSection(Mask
, "global", GlobalName
, Category
);
35 bool NoSanitizeList::containsType(SanitizerMask Mask
, StringRef MangledTypeName
,
36 StringRef Category
) const {
37 return SSCL
->inSection(Mask
, "type", MangledTypeName
, Category
);
40 bool NoSanitizeList::containsFunction(SanitizerMask Mask
,
41 StringRef FunctionName
) const {
42 return SSCL
->inSection(Mask
, "fun", FunctionName
);
45 bool NoSanitizeList::containsFile(SanitizerMask Mask
, StringRef FileName
,
46 StringRef Category
) const {
47 return SSCL
->inSection(Mask
, "src", FileName
, Category
);
50 bool NoSanitizeList::containsMainFile(SanitizerMask Mask
, StringRef FileName
,
51 StringRef Category
) const {
52 return SSCL
->inSection(Mask
, "mainfile", FileName
, Category
);
55 bool NoSanitizeList::containsLocation(SanitizerMask Mask
, SourceLocation Loc
,
56 StringRef Category
) const {
57 return Loc
.isValid() &&
58 containsFile(Mask
, SM
.getFilename(SM
.getFileLoc(Loc
)), Category
);