diff options
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 13 |
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)) |