diff options
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Driver/SanitizerArgs.cpp | 14 | ||||
| -rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 3 | 
2 files changed, 16 insertions, 1 deletions
diff --git a/clang/lib/Driver/SanitizerArgs.cpp b/clang/lib/Driver/SanitizerArgs.cpp index c192034236d..98e5480136b 100644 --- a/clang/lib/Driver/SanitizerArgs.cpp +++ b/clang/lib/Driver/SanitizerArgs.cpp @@ -25,6 +25,7 @@ void SanitizerArgs::clear() {    Kind = 0;    BlacklistFile = "";    MsanTrackOrigins = 0; +  AsanFieldPadding = 0;    AsanZeroBaseShadow = false;    UbsanTrapOnError = false;    AsanSharedRuntime = false; @@ -164,6 +165,15 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,          (TC.getTriple().getEnvironment() == llvm::Triple::Android);      AsanZeroBaseShadow =          (TC.getTriple().getEnvironment() == llvm::Triple::Android); +    if (Arg *A = +            Args.getLastArg(options::OPT_fsanitize_address_field_padding)) { +        StringRef S = A->getValue(); +        // Legal values are 0 and 1, 2, but in future we may add more levels. +        if (S.getAsInteger(0, AsanFieldPadding) || AsanFieldPadding < 0 || +            AsanFieldPadding > 2) { +          D.Diag(diag::err_drv_invalid_value) << A->getAsString(Args) << S; +        } +    }    }    // Parse -link-cxx-sanitizer flag. @@ -191,7 +201,9 @@ void SanitizerArgs::addArgs(const llvm::opt::ArgList &Args,    if (MsanTrackOrigins)      CmdArgs.push_back(Args.MakeArgString("-fsanitize-memory-track-origins=" +                                           llvm::utostr(MsanTrackOrigins))); - +  if (AsanFieldPadding) +    CmdArgs.push_back(Args.MakeArgString("-fsanitize-address-field-padding=" + +                                         llvm::utostr(AsanFieldPadding)));    // Workaround for PR16386.    if (needsMsanRt())      CmdArgs.push_back(Args.MakeArgString("-fno-assume-sane-operator-new")); diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 043141ad673..25d444eeb81 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -1628,6 +1628,9 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,        break;      }    } +  // -fsanitize-address-field-padding=N has to be a LangOpt, parse it here. +  Opts.Sanitize.SanitizeAddressFieldPadding = +      getLastArgIntValue(Args, OPT_fsanitize_address_field_padding, 0, Diags);  }  static void ParsePreprocessorArgs(PreprocessorOptions &Opts, ArgList &Args,  | 

