clang 10.0.0git

Macros | Enumerations | Functions | Variables
SanitizerArgs.cpp File Reference
`#include "clang/Driver/SanitizerArgs.h"`
`#include "ToolChains/CommonArgs.h"`
`#include "clang/Basic/Sanitizers.h"`
`#include "clang/Driver/Driver.h"`
`#include "clang/Driver/DriverDiagnostic.h"`
`#include "clang/Driver/Options.h"`
`#include "clang/Driver/ToolChain.h"`
`#include "llvm/ADT/StringExtras.h"`
`#include "llvm/ADT/StringSwitch.h"`
`#include "llvm/Support/FileSystem.h"`
`#include "llvm/Support/Path.h"`
`#include "llvm/Support/SpecialCaseList.h"`
`#include "llvm/Support/TargetParser.h"`
`#include <memory>`
`#include "clang/Basic/Sanitizers.def"`
Include dependency graph for SanitizerArgs.cpp:

Go to the source code of this file.

## Macros
#define | SANITIZER(NAME, ID)
#define | SANITIZER_GROUP(NAME, ID, ALIAS)
#define | SANITIZER(NAME, ID)

## Enumerations
enum | CoverageFeature { CoverageFunc = 1 << 0, CoverageBB = 1 << 1, CoverageEdge = 1 << 2, CoverageIndirCall = 1 << 3, CoverageTraceBB = 1 << 4, CoverageTraceCmp = 1 << 5, CoverageTraceDiv = 1 << 6, CoverageTraceGep = 1 << 7, Coverage8bitCounters = 1 << 8, CoverageTracePC = 1 << 9, CoverageTracePCGuard = 1 << 10, CoverageNoPrune = 1 << 11, CoverageInline8bitCounters = 1 << 12, CoveragePCTable = 1 << 13, CoverageStackDepth = 1 << 14 }

## Functions
static SanitizerMask | parseArgValues (const Driver &D, const llvm::opt::Arg *A, bool DiagnoseErrors)
| Parse a -fsanitize= or -fno-sanitize= argument's values, diagnosing any invalid components. More...
static int | parseCoverageFeatures (const Driver &D, const llvm::opt::Arg *A)
| Parse -f(no-)?sanitize-coverage= flag values, diagnosing any invalid components. More...
static std::string | lastArgumentForMask (const Driver &D, const llvm::opt::ArgList &Args, SanitizerMask Mask)
| Produce an argument string from ArgList `Args`, which shows how it provides some sanitizer kind from `Mask`. More...
static std::string | describeSanitizeArg (const llvm::opt::Arg *A, SanitizerMask Mask)
| Produce an argument string from argument `A`, which shows how it provides a value in `Mask`. More...
static std::string | toString (const clang::SanitizerSet &Sanitizers)
| Produce a string containing comma-separated names of sanitizers in `Sanitizers` set. More...
static void | addDefaultBlacklists (const Driver &D, SanitizerMask Kinds, std::vector< std::string > &BlacklistFiles)
static SanitizerMask | setGroupBits (SanitizerMask Kinds)
| Sets group bits for every group that has at least one representative already enabled in `Kinds`. More...
static SanitizerMask | parseSanitizeTrapArgs (const Driver &D, const llvm::opt::ArgList &Args)
static void | addIncludeLinkerOption (const ToolChain &TC, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, StringRef SymbolName)
static bool | hasTargetFeatureMTE (const llvm::opt::ArgStringList &CmdArgs)

## Variables
static const SanitizerMask | NeedsUbsanRt
static const SanitizerMask | NeedsUbsanCxxRt
static const SanitizerMask | NotAllowedWithTrap = SanitizerKind::Vptr
static const SanitizerMask | NotAllowedWithMinimalRuntime
static const SanitizerMask | RequiresPIE
static const SanitizerMask | NeedsUnwindTables
static const SanitizerMask | SupportsCoverage
static const SanitizerMask | RecoverableByDefault
static const SanitizerMask | Unrecoverable
static const SanitizerMask | AlwaysRecoverable
static const SanitizerMask | LegacyFsanitizeRecoverMask
static const SanitizerMask | NeedsLTO = SanitizerKind::CFI
static const SanitizerMask | TrappingSupported
static const SanitizerMask | TrappingDefault = SanitizerKind::CFI
static const SanitizerMask | CFIClasses
static const SanitizerMask | CompatibleWithMinimalRuntime

## Macro Definition Documentation

## ◆ SANITIZER [1/2]

#define SANITIZER | ( |  | NAME,
|  |  | ID
| ) |  |

## ◆ SANITIZER [2/2]

#define SANITIZER | ( |  | NAME,
|  |  | ID
| ) |  |

Value:
if (Sanitizers.has(SanitizerKind::ID)) { \
if (!Res.empty()) \
Res += ","; \
Res += NAME; \
}
clang::Builtin::ID
ID
Definition: Builtins.h:46

## ◆ SANITIZER_GROUP

#define SANITIZER_GROUP | ( |  | NAME,
|  |  | ID,
|  |  | ALIAS
| ) |  |

Value:
if (Kinds & SanitizerKind::ID) \
Kinds |= SanitizerKind::ID##Group;
clang::Builtin::ID
ID
Definition: Builtins.h:46

## Enumeration Type Documentation

## ◆ CoverageFeature

enum CoverageFeature

Enumerator
CoverageFunc |
CoverageBB |
CoverageEdge |
CoverageIndirCall |
CoverageTraceBB |
CoverageTraceCmp |
CoverageTraceDiv |
CoverageTraceGep |
Coverage8bitCounters |
CoverageTracePC |
CoverageTracePCGuard |
CoverageNoPrune |
CoverageInline8bitCounters |
CoveragePCTable |
CoverageStackDepth |

Definition at line 75 of file SanitizerArgs.cpp.

## Function Documentation

## ◆ addDefaultBlacklists()

static void addDefaultBlacklists | ( | const Driver & | D,
|  | SanitizerMask | Kinds,
|  | std::vector< std::string > & | BlacklistFiles
| ) |  |
| static

Definition at line 121 of file SanitizerArgs.cpp.

References clang::driver::Driver::Diag(), clang::driver::Driver::getVFS(), and clang::driver::Driver::ResourceDir.

## ◆ addIncludeLinkerOption()

static void addIncludeLinkerOption | ( | const ToolChain & | TC,
|  | const llvm::opt::ArgList & | Args,
|  | llvm::opt::ArgStringList & | CmdArgs,
|  | StringRef | SymbolName
| ) |  |
| static

Definition at line 868 of file SanitizerArgs.cpp.

References clang::driver::ToolChain::getTriple().

Referenced by clang::driver::SanitizerArgs::addArgs().

## ◆ describeSanitizeArg()

std::string describeSanitizeArg | ( | const llvm::opt::Arg * | A,
|  | SanitizerMask | Mask
| ) |  |
| static

Produce an argument string from argument `A`, which shows how it provides a value in `Mask`.

For instance, the argument "-fsanitize=address,alignment" with mask `NeedsUbsanRt` would produce "-fsanitize=alignment".

Definition at line 1149 of file SanitizerArgs.cpp.

References clang::expandSanitizerGroups(), and clang::parseSanitizerValue().

Referenced by lastArgumentForMask(), and clang::driver::SanitizerArgs::SanitizerArgs().

## ◆ hasTargetFeatureMTE()

static bool hasTargetFeatureMTE | ( | const llvm::opt::ArgStringList & | CmdArgs | ) |
| static

Definition at line 882 of file SanitizerArgs.cpp.

References End.

Referenced by clang::driver::SanitizerArgs::addArgs().

## ◆ lastArgumentForMask()

std::string lastArgumentForMask | ( | const Driver & | D,
|  | const llvm::opt::ArgList & | Args,
|  | SanitizerMask | Mask
| ) |  |
| static

Produce an argument string from ArgList `Args`, which shows how it provides some sanitizer kind from `Mask`.

For example, the argument list "-fsanitize=thread,vptr -fsanitize=address" with mask `NeedsUbsanRt` would produce "-fsanitize=vptr".

Definition at line 1129 of file SanitizerArgs.cpp.

References describeSanitizeArg(), clang::expandSanitizerGroups(), and parseArgValues().

Referenced by clang::driver::SanitizerArgs::addArgs(), and clang::driver::SanitizerArgs::SanitizerArgs().

## ◆ parseArgValues()

SanitizerMask parseArgValues | ( | const Driver & | D,
|  | const llvm::opt::Arg * | A,
|  | bool | DiagnoseErrors
| ) |  |
| static

Parse a -fsanitize= or -fno-sanitize= argument's values, diagnosing any invalid components.

Returns a SanitizerMask.

Definition at line 1069 of file SanitizerArgs.cpp.

References clang::driver::Driver::Diag(), and clang::parseSanitizerValue().

Referenced by lastArgumentForMask(), parseSanitizeTrapArgs(), and clang::driver::SanitizerArgs::SanitizerArgs().

## ◆ parseCoverageFeatures()

int parseCoverageFeatures | ( | const Driver & | D,
|  | const llvm::opt::Arg * | A
| ) |  |
| static

Parse -f(no-)?sanitize-coverage= flag values, diagnosing any invalid components.

Returns OR of members of `CoverageFeature` enumeration.

Definition at line 1098 of file SanitizerArgs.cpp.

References Coverage8bitCounters, CoverageBB, CoverageEdge, CoverageFunc, CoverageIndirCall, CoverageInline8bitCounters, CoverageNoPrune, CoveragePCTable, CoverageStackDepth, CoverageTraceBB, CoverageTraceCmp, CoverageTraceDiv, CoverageTraceGep, CoverageTracePC, CoverageTracePCGuard, and clang::driver::Driver::Diag().

## ◆ parseSanitizeTrapArgs()

static SanitizerMask parseSanitizeTrapArgs | ( | const Driver & | D,
|  | const llvm::opt::ArgList & | Args
| ) |  |
| static

Definition at line 164 of file SanitizerArgs.cpp.

References clang::interp::Add(), parseArgValues(), and setGroupBits().

Referenced by clang::driver::SanitizerArgs::SanitizerArgs().

## ◆ setGroupBits()

static SanitizerMask setGroupBits | ( | SanitizerMask | Kinds | ) |
| static

Sets group bits for every group that has at least one representative already enabled in `Kinds`.

Definition at line 155 of file SanitizerArgs.cpp.

Referenced by parseSanitizeTrapArgs(), and clang::driver::SanitizerArgs::SanitizerArgs().

## ◆ toString()

static std::string toString | ( | const clang::SanitizerSet & | Sanitizers | ) |
| static

Produce a string containing comma-separated names of sanitizers in `Sanitizers` set.

Definition at line 856 of file SanitizerArgs.cpp.

Referenced by clang::driver::SanitizerArgs::addArgs(), addSanitizersAtO0(), clang::interp::AddSubMulHelper(), clang::tooling::applyAtomicChanges(), clang::tooling::convertChangesToFileReplacements(), clang::tooling::CommonOptionsParser::create(), clang::tooling::internal::createExecutorFromCommandLineArgsImpl(), clang::ast_matchers::dynamic::Diagnostics::errors(), findBlockLocations(), clang::tooling::formatAndApplyAllReplacements(), clang::format::formatReplacements(), clang::APFixedPoint::getIntPart(), clang::tooling::Replacement::getReplacementText(), getStaticBooleanValue(), llvm::yaml::MappingTraits< clang::tooling::DiagnosticMessage >::mapping(), llvm::yaml::MappingTraits< TemplightEntry >::mapping(), clang::operator<<(), clang::serialization::reader::ASTDeclContextNameLookupTrait::ReadDataInto(), clang::ASTReader::ReadSubExpr(), clang::tooling::HeaderIncludes::remove(), clang::tooling::ReplaceStmtWithText::run(), clang::tooling::ReplaceNodeWithTemplate::run(), clang::tooling::ReplaceStmtWithStmt::run(), clang::tooling::ReplaceIfStmtWithItsBody::run(), clang::tooling::ClangTool::run(), and clang::SavedStreamPosition::~SavedStreamPosition().

## Variable Documentation

## ◆ AlwaysRecoverable

const SanitizerMask AlwaysRecoverable
| static

Initial value:
=
SanitizerKind::KernelAddress | SanitizerKind::KernelHWAddress

Definition at line 57 of file SanitizerArgs.cpp.

Referenced by emitCheckHandlerCall(), and getRecoverableKind().

## ◆ CFIClasses

const SanitizerMask CFIClasses
| static

Initial value:
=
SanitizerKind::CFIVCall | SanitizerKind::CFINVCall |
SanitizerKind::CFIMFCall | SanitizerKind::CFIDerivedCast |
SanitizerKind::CFIUnrelatedCast

Definition at line 68 of file SanitizerArgs.cpp.

Referenced by clang::driver::SanitizerArgs::addArgs().

## ◆ CompatibleWithMinimalRuntime

const SanitizerMask CompatibleWithMinimalRuntime
| static

Initial value:
=
TrappingSupported | SanitizerKind::Scudo | SanitizerKind::ShadowCallStack
TrappingSupported
static const SanitizerMask TrappingSupported
Definition: SanitizerArgs.cpp:62

Definition at line 72 of file SanitizerArgs.cpp.

## ◆ LegacyFsanitizeRecoverMask

const SanitizerMask LegacyFsanitizeRecoverMask
| static

Initial value:
=
SanitizerKind::Undefined | SanitizerKind::Integer

Definition at line 59 of file SanitizerArgs.cpp.

## ◆ NeedsLTO

const SanitizerMask NeedsLTO = SanitizerKind::CFI
| static

Definition at line 61 of file SanitizerArgs.cpp.

Referenced by clang::driver::SanitizerArgs::needsLTO().

## ◆ NeedsUbsanCxxRt

const SanitizerMask NeedsUbsanCxxRt
| static

Initial value:
=
SanitizerKind::Vptr | SanitizerKind::CFI

Definition at line 31 of file SanitizerArgs.cpp.

Referenced by clang::driver::SanitizerArgs::SanitizerArgs().

## ◆ NeedsUbsanRt

const SanitizerMask NeedsUbsanRt
| static

Initial value:
=
SanitizerKind::Undefined | SanitizerKind::Integer |
SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
SanitizerKind::CFI | SanitizerKind::FloatDivideByZero
clang::ento::Nullability
Nullability
Definition: CheckerHelpers.h:52

Definition at line 27 of file SanitizerArgs.cpp.

## ◆ NeedsUnwindTables

const SanitizerMask NeedsUnwindTables
| static

Initial value:
=
SanitizerKind::Address | SanitizerKind::HWAddress | SanitizerKind::Thread |
SanitizerKind::Memory | SanitizerKind::DataFlow

Definition at line 38 of file SanitizerArgs.cpp.

Referenced by clang::driver::SanitizerArgs::needsUnwindTables().

## ◆ NotAllowedWithMinimalRuntime

const SanitizerMask NotAllowedWithMinimalRuntime
| static

Initial value:
=
SanitizerKind::Function | SanitizerKind::Vptr
clang::XRayInstrKind::Function
constexpr XRayInstrMask Function
Definition: XRayInstr.h:38

Definition at line 34 of file SanitizerArgs.cpp.

## ◆ NotAllowedWithTrap

const SanitizerMask NotAllowedWithTrap = SanitizerKind::Vptr
| static

Definition at line 33 of file SanitizerArgs.cpp.

Referenced by clang::driver::SanitizerArgs::SanitizerArgs().

## ◆ RecoverableByDefault

const SanitizerMask RecoverableByDefault
| static

Initial value:
=
SanitizerKind::Undefined | SanitizerKind::Integer |
SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
SanitizerKind::FloatDivideByZero
clang::ento::Nullability
Nullability
Definition: CheckerHelpers.h:52

Definition at line 51 of file SanitizerArgs.cpp.

## ◆ RequiresPIE

const SanitizerMask RequiresPIE
| static

Initial value:
=
SanitizerKind::DataFlow | SanitizerKind::HWAddress | SanitizerKind::Scudo

Definition at line 36 of file SanitizerArgs.cpp.

Referenced by clang::driver::SanitizerArgs::requiresPIE().

## ◆ SupportsCoverage

const SanitizerMask SupportsCoverage
| static

Initial value:
=
SanitizerKind::Address | SanitizerKind::HWAddress |
SanitizerKind::KernelAddress | SanitizerKind::KernelHWAddress |
SanitizerKind::MemTag | SanitizerKind::Memory |
SanitizerKind::KernelMemory | SanitizerKind::Leak |
SanitizerKind::Undefined | SanitizerKind::Integer |
SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
SanitizerKind::DataFlow | SanitizerKind::Fuzzer |
SanitizerKind::FuzzerNoLink | SanitizerKind::FloatDivideByZero |
SanitizerKind::SafeStack | SanitizerKind::ShadowCallStack
clang::ento::Nullability
Nullability
Definition: CheckerHelpers.h:52

Definition at line 41 of file SanitizerArgs.cpp.

## ◆ TrappingDefault

const SanitizerMask TrappingDefault = SanitizerKind::CFI
| static

Definition at line 67 of file SanitizerArgs.cpp.

## ◆ TrappingSupported

const SanitizerMask TrappingSupported
| static

Initial value:
=
(SanitizerKind::Undefined & ~SanitizerKind::Vptr) |
SanitizerKind::UnsignedIntegerOverflow | SanitizerKind::ImplicitConversion |
SanitizerKind::Nullability | SanitizerKind::LocalBounds |
SanitizerKind::CFI | SanitizerKind::FloatDivideByZero
clang::ento::Nullability
Nullability
Definition: CheckerHelpers.h:52
clang::SanitizerKind
Definition: Sanitizers.h:129

Definition at line 62 of file SanitizerArgs.cpp.

## ◆ Unrecoverable

const SanitizerMask Unrecoverable
| static

Initial value:
=
SanitizerKind::Unreachable | SanitizerKind::Return

Definition at line 55 of file SanitizerArgs.cpp.

Referenced by emitCheckHandlerCall(), and getRecoverableKind().