Author: Vitaly Buka Date: 2022-09-08T19:05:17-07:00 New Revision: e261b03396078feba2246340f81160f76f7d5e92
URL: https://github.com/llvm/llvm-project/commit/e261b03396078feba2246340f81160f76f7d5e92 DIFF: https://github.com/llvm/llvm-project/commit/e261b03396078feba2246340f81160f76f7d5e92.diff LOG: [sanitizers] Add experimental flag to insert sanitizers earlier Added: Modified: clang/lib/CodeGen/BackendUtil.cpp Removed: ################################################################################ diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index ccde687eba09c..64b21ef608bb1 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -97,6 +97,11 @@ using namespace llvm; namespace llvm { extern cl::opt<bool> DebugInfoCorrelate; + +// Experiment to move sanitizers earlier. +static cl::opt<bool> ClSanitizeOnOptimizerEarlyEP( + "sanitizer-early-opt-ep", cl::Optional, + cl::desc("Insert sanitizers on OptimizerEarlyEP."), cl::init(false)); } namespace { @@ -632,8 +637,9 @@ static OptimizationLevel mapToLevel(const CodeGenOptions &Opts) { static void addSanitizers(const Triple &TargetTriple, const CodeGenOptions &CodeGenOpts, const LangOptions &LangOpts, PassBuilder &PB) { - PB.registerOptimizerLastEPCallback([&](ModulePassManager &MPM, - OptimizationLevel Level) { + + auto SanitizersCallback = [&](ModulePassManager &MPM, + OptimizationLevel Level) { if (CodeGenOpts.hasSanitizeCoverage()) { auto SancovOpts = getSancovOptsFromCGOpts(CodeGenOpts); MPM.addPass(SanitizerCoveragePass( @@ -708,7 +714,11 @@ static void addSanitizers(const Triple &TargetTriple, if (LangOpts.Sanitize.has(SanitizerKind::DataFlow)) { MPM.addPass(DataFlowSanitizerPass(LangOpts.NoSanitizeFiles)); } - }); + }; + if (ClSanitizeOnOptimizerEarlyEP) + PB.registerOptimizerEarlyEPCallback(SanitizersCallback); + else + PB.registerOptimizerLastEPCallback(SanitizersCallback); } void EmitAssemblyHelper::RunOptimizationPipeline( _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits