36 std::vector<std::string> UserIgnorelistFiles;
37 std::vector<std::string> SystemIgnorelistFiles;
38 std::vector<std::string> CoverageAllowlistFiles;
39 std::vector<std::string> CoverageIgnorelistFiles;
40 std::vector<std::string> BinaryMetadataIgnorelistFiles;
41 int CoverageFeatures = 0;
42 int CoverageStackDepthCallbackMin = 0;
43 int BinaryMetadataFeatures = 0;
44 int OverflowPatternExclusions = 0;
45 int MsanTrackOrigins = 0;
46 bool MsanUseAfterDtor =
true;
47 bool MsanParamRetval =
true;
48 bool CfiCrossDso =
false;
49 bool CfiICallGeneralizePointers =
false;
50 bool CfiICallNormalizeIntegers =
false;
51 bool CfiCanonicalJumpTables =
false;
52 bool KcfiArity =
false;
53 std::optional<std::string> KcfiHash;
54 int AsanFieldPadding = 0;
55 bool SharedRuntime =
false;
56 bool StableABI =
false;
57 bool AsanUseAfterScope =
true;
58 bool AsanPoisonCustomArrayCookie =
false;
59 bool AsanGlobalsDeadStripping =
false;
60 bool AsanUseOdrIndicator =
false;
61 bool AsanInvalidPointerCmp =
false;
62 bool AsanInvalidPointerSub =
false;
63 bool AsanOutlineInstrumentation =
false;
64 llvm::AsanDtorKind AsanDtorKind = llvm::AsanDtorKind::Invalid;
65 std::string HwasanAbi;
66 bool LinkRuntimes =
true;
67 bool LinkCXXRuntimes =
false;
69 bool SafeStackRuntime =
false;
71 bool TsanMemoryAccess =
true;
72 bool TsanFuncEntryExit =
true;
73 bool TsanAtomics =
true;
74 bool MinimalRuntime =
false;
75 bool TrapLoop =
false;
76 bool TysanOutlineInstrumentation =
true;
77 bool HandlerPreserveAllRegs =
false;
79 bool ImplicitCfiRuntime =
false;
80 bool NeedsMemProfRt =
false;
81 bool HwasanUseAliases =
false;
82 llvm::AsanDetectStackUseAfterReturnMode AsanUseAfterReturn =
83 llvm::AsanDetectStackUseAfterReturnMode::Invalid;
85 std::string MemtagMode;
86 bool AllocTokenFastABI =
false;
87 bool AllocTokenExtended =
false;
92 bool DiagnoseErrors =
true,
bool DiagnoseBoundArchErrors =
true,
100 bool needsAsanRt()
const {
return Sanitizers.has(SanitizerKind::Address); }
102 return Sanitizers.has(SanitizerKind::HWAddress);
107 bool needsTysanRt()
const {
return Sanitizers.has(SanitizerKind::Type); }
108 bool needsTsanRt()
const {
return Sanitizers.has(SanitizerKind::Thread); }
109 bool needsMsanRt()
const {
return Sanitizers.has(SanitizerKind::Memory); }
110 bool needsFuzzer()
const {
return Sanitizers.has(SanitizerKind::Fuzzer); }
112 return Sanitizers.has(SanitizerKind::Leak) &&
113 !Sanitizers.has(SanitizerKind::Address) &&
114 !Sanitizers.has(SanitizerKind::HWAddress);
121 bool needsDfsanRt()
const {
return Sanitizers.has(SanitizerKind::DataFlow); }
126 bool needsScudoRt()
const {
return Sanitizers.has(SanitizerKind::Scudo); }
128 return Sanitizers.has(SanitizerKind::NumericalStability);
130 bool needsRtsanRt()
const {
return Sanitizers.has(SanitizerKind::Realtime); }
136 return Sanitizers.has(SanitizerKind::MemtagHeap);
139 return Sanitizers.has(SanitizerKind::MemtagStack);
142 return Sanitizers.has(SanitizerKind::MemtagGlobals);
145 assert(!MemtagMode.empty());
150 return Sanitizers.has(SanitizerKind::ShadowCallStack);
161 llvm::opt::ArgStringList &CmdArgs,
types::ID InputType)
const;
SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors=true, bool DiagnoseBoundArchErrors=true, BoundArch BA={}, Action::OffloadKind DeviceOffloadKind=Action::OFK_None)
Parses the sanitizer arguments from an argument list.