35 std::vector<std::string> UserIgnorelistFiles;
36 std::vector<std::string> SystemIgnorelistFiles;
37 std::vector<std::string> CoverageAllowlistFiles;
38 std::vector<std::string> CoverageIgnorelistFiles;
39 std::vector<std::string> BinaryMetadataIgnorelistFiles;
40 int CoverageFeatures = 0;
41 int CoverageStackDepthCallbackMin = 0;
42 int BinaryMetadataFeatures = 0;
43 int OverflowPatternExclusions = 0;
44 int MsanTrackOrigins = 0;
45 bool MsanUseAfterDtor =
true;
46 bool MsanParamRetval =
true;
47 bool CfiCrossDso =
false;
48 bool CfiICallGeneralizePointers =
false;
49 bool CfiICallNormalizeIntegers =
false;
50 bool CfiCanonicalJumpTables =
false;
51 bool KcfiArity =
false;
52 int AsanFieldPadding = 0;
53 bool SharedRuntime =
false;
54 bool StableABI =
false;
55 bool AsanUseAfterScope =
true;
56 bool AsanPoisonCustomArrayCookie =
false;
57 bool AsanGlobalsDeadStripping =
false;
58 bool AsanUseOdrIndicator =
false;
59 bool AsanInvalidPointerCmp =
false;
60 bool AsanInvalidPointerSub =
false;
61 bool AsanOutlineInstrumentation =
false;
62 llvm::AsanDtorKind AsanDtorKind = llvm::AsanDtorKind::Invalid;
63 std::string HwasanAbi;
64 bool LinkRuntimes =
true;
65 bool LinkCXXRuntimes =
false;
67 bool SafeStackRuntime =
false;
69 bool TsanMemoryAccess =
true;
70 bool TsanFuncEntryExit =
true;
71 bool TsanAtomics =
true;
72 bool MinimalRuntime =
false;
73 bool TrapLoop =
false;
74 bool TysanOutlineInstrumentation =
true;
75 bool HandlerPreserveAllRegs =
false;
77 bool ImplicitCfiRuntime =
false;
78 bool NeedsMemProfRt =
false;
79 bool HwasanUseAliases =
false;
80 llvm::AsanDetectStackUseAfterReturnMode AsanUseAfterReturn =
81 llvm::AsanDetectStackUseAfterReturnMode::Invalid;
83 std::string MemtagMode;
84 bool AllocTokenFastABI =
false;
85 bool AllocTokenExtended =
false;
90 bool DiagnoseErrors =
true,
bool DiagnoseBoundArchErrors =
true,
98 bool needsAsanRt()
const {
return Sanitizers.has(SanitizerKind::Address); }
100 return Sanitizers.has(SanitizerKind::HWAddress);
105 bool needsTysanRt()
const {
return Sanitizers.has(SanitizerKind::Type); }
106 bool needsTsanRt()
const {
return Sanitizers.has(SanitizerKind::Thread); }
107 bool needsMsanRt()
const {
return Sanitizers.has(SanitizerKind::Memory); }
108 bool needsFuzzer()
const {
return Sanitizers.has(SanitizerKind::Fuzzer); }
110 return Sanitizers.has(SanitizerKind::Leak) &&
111 !Sanitizers.has(SanitizerKind::Address) &&
112 !Sanitizers.has(SanitizerKind::HWAddress);
119 bool needsDfsanRt()
const {
return Sanitizers.has(SanitizerKind::DataFlow); }
124 bool needsScudoRt()
const {
return Sanitizers.has(SanitizerKind::Scudo); }
126 return Sanitizers.has(SanitizerKind::NumericalStability);
128 bool needsRtsanRt()
const {
return Sanitizers.has(SanitizerKind::Realtime); }
134 return Sanitizers.has(SanitizerKind::MemtagHeap);
137 return Sanitizers.has(SanitizerKind::MemtagStack);
140 return Sanitizers.has(SanitizerKind::MemtagGlobals);
143 assert(!MemtagMode.empty());
148 return Sanitizers.has(SanitizerKind::ShadowCallStack);
159 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.