aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r--clang/lib/Frontend/CompilerInvocation.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index eb44754..12dbd45 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -1937,6 +1937,19 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args,
Opts.EmitVersionIdentMetadata = Args.hasFlag(OPT_Qy, OPT_Qn, true);
+ if (LangOptsRef.Sanitize.has(SanitizerKind::Address)) {
+ if (Arg *A =
+ Args.getLastArg(options::OPT_sanitize_address_destructor_kind_EQ)) {
+ auto destructorKind = AsanDtorKindFromString(A->getValue());
+ if (destructorKind == llvm::AsanDtorKind::Invalid) {
+ Diags.Report(clang::diag::err_drv_unsupported_option_argument)
+ << A->getOption().getName() << A->getValue();
+ } else {
+ Opts.setSanitizeAddressDtorKind(destructorKind);
+ }
+ }
+ }
+
if (Args.hasArg(options::OPT_ffinite_loops))
Opts.FiniteLoops = CodeGenOptions::FiniteLoopsKind::Always;
else if (Args.hasArg(options::OPT_fno_finite_loops))