34 std::vector<std::string> UserIgnorelistFiles;
35 std::vector<std::string> SystemIgnorelistFiles;
36 std::vector<std::string> CoverageAllowlistFiles;
37 std::vector<std::string> CoverageIgnorelistFiles;
38 std::vector<std::string> BinaryMetadataIgnorelistFiles;
39 int CoverageFeatures = 0;
40 int CoverageStackDepthCallbackMin = 0;
41 int BinaryMetadataFeatures = 0;
42 int OverflowPatternExclusions = 0;
43 int MsanTrackOrigins = 0;
44 bool MsanUseAfterDtor =
true;
45 bool MsanParamRetval =
true;
46 bool CfiCrossDso =
false;
47 bool CfiICallGeneralizePointers =
false;
48 bool CfiICallNormalizeIntegers =
false;
49 bool CfiCanonicalJumpTables =
false;
50 bool KcfiArity =
false;
51 int AsanFieldPadding = 0;
52 bool SharedRuntime =
false;
53 bool StableABI =
false;
54 bool AsanUseAfterScope =
true;
55 bool AsanPoisonCustomArrayCookie =
false;
56 bool AsanGlobalsDeadStripping =
false;
57 bool AsanUseOdrIndicator =
false;
58 bool AsanInvalidPointerCmp =
false;
59 bool AsanInvalidPointerSub =
false;
60 bool AsanOutlineInstrumentation =
false;
61 llvm::AsanDtorKind AsanDtorKind = llvm::AsanDtorKind::Invalid;
62 std::string HwasanAbi;
63 bool LinkRuntimes =
true;
64 bool LinkCXXRuntimes =
false;
66 bool SafeStackRuntime =
false;
68 bool TsanMemoryAccess =
true;
69 bool TsanFuncEntryExit =
true;
70 bool TsanAtomics =
true;
71 bool MinimalRuntime =
false;
72 bool TrapLoop =
false;
73 bool TysanOutlineInstrumentation =
true;
74 bool HandlerPreserveAllRegs =
false;
76 bool ImplicitCfiRuntime =
false;
77 bool NeedsMemProfRt =
false;
78 bool HwasanUseAliases =
false;
79 llvm::AsanDetectStackUseAfterReturnMode AsanUseAfterReturn =
80 llvm::AsanDetectStackUseAfterReturnMode::Invalid;
82 std::string MemtagMode;
83 bool AllocTokenFastABI =
false;
84 bool AllocTokenExtended =
false;
89 bool DiagnoseErrors =
true,
bool DiagnoseBoundArchErrors =
true,
90 StringRef BoundArch =
"",
97 bool needsAsanRt()
const {
return Sanitizers.has(SanitizerKind::Address); }
99 return Sanitizers.has(SanitizerKind::HWAddress);
104 bool needsTysanRt()
const {
return Sanitizers.has(SanitizerKind::Type); }
105 bool needsTsanRt()
const {
return Sanitizers.has(SanitizerKind::Thread); }
106 bool needsMsanRt()
const {
return Sanitizers.has(SanitizerKind::Memory); }
107 bool needsFuzzer()
const {
return Sanitizers.has(SanitizerKind::Fuzzer); }
109 return Sanitizers.has(SanitizerKind::Leak) &&
110 !Sanitizers.has(SanitizerKind::Address) &&
111 !Sanitizers.has(SanitizerKind::HWAddress);
118 bool needsDfsanRt()
const {
return Sanitizers.has(SanitizerKind::DataFlow); }
123 bool needsScudoRt()
const {
return Sanitizers.has(SanitizerKind::Scudo); }
125 return Sanitizers.has(SanitizerKind::NumericalStability);
127 bool needsRtsanRt()
const {
return Sanitizers.has(SanitizerKind::Realtime); }
133 return Sanitizers.has(SanitizerKind::MemtagHeap);
136 return Sanitizers.has(SanitizerKind::MemtagStack);
139 return Sanitizers.has(SanitizerKind::MemtagGlobals);
142 assert(!MemtagMode.empty());
147 return Sanitizers.has(SanitizerKind::ShadowCallStack);
158 llvm::opt::ArgStringList &CmdArgs,
types::ID InputType)
const;
SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors=true, bool DiagnoseBoundArchErrors=true, StringRef BoundArch="", Action::OffloadKind DeviceOffloadKind=Action::OFK_None)
Parses the sanitizer arguments from an argument list.