diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -1544,6 +1544,10 @@ Conf.CGFileType = getCodeGenFileType(Action); break; } + Triple TargetTriple(M->getTargetTriple()); + Conf.OptPassBuilderHook = [&](PassBuilder &PB) { + addSanitizers(TargetTriple, CGOpts, LOpts, PB); + }; if (Error E = thinBackend(Conf, -1, AddStream, *M, *CombinedIndex, ImportList, ModuleToDefinedGVSummaries[M->getModuleIdentifier()], diff --git a/llvm/include/llvm/LTO/Config.h b/llvm/include/llvm/LTO/Config.h --- a/llvm/include/llvm/LTO/Config.h +++ b/llvm/include/llvm/LTO/Config.h @@ -50,6 +50,8 @@ std::vector PassPlugins; /// For adding passes that run right before codegen. std::function PreCodeGenPassesHook; + /// For adding passes that run by opt. + std::function OptPassBuilderHook; Optional RelocModel = Reloc::PIC_; Optional CodeModel = None; CodeGenOpt::Level CGOptLevel = CodeGenOpt::Default; diff --git a/llvm/lib/LTO/LTOBackend.cpp b/llvm/lib/LTO/LTOBackend.cpp --- a/llvm/lib/LTO/LTOBackend.cpp +++ b/llvm/lib/LTO/LTOBackend.cpp @@ -324,6 +324,9 @@ PB.registerLoopAnalyses(LAM); PB.crossRegisterProxies(LAM, FAM, CGAM, MAM); + if (Conf.OptPassBuilderHook) + Conf.OptPassBuilderHook(PB); + ModulePassManager MPM; // Always verify the input.