Index: clang/lib/CodeGen/BackendUtil.cpp =================================================================== --- clang/lib/CodeGen/BackendUtil.cpp +++ clang/lib/CodeGen/BackendUtil.cpp @@ -917,6 +917,14 @@ } } +FunctionPassManager addSanitizersAtO0() { + FunctionPassManager FPM; + if (LangOpts.Sanitize.has(SanitizerKind::Memory)) + FPM.addPass(MemorySanitizerPass()); + + return FPM; +} + /// A clean version of `EmitAssembly` that uses the new pass manager. /// /// Not all features are currently supported in this system, but where @@ -1036,7 +1044,7 @@ if (LangOpts.Sanitize.has(SanitizerKind::Memory)) PB.registerOptimizerLastEPCallback( [](FunctionPassManager &FPM, PassBuilder::OptimizationLevel Level) { - FPM.addPass(MemorySanitizerPass({})); + FPM.addPass(MemorySanitizerPass()); }); if (LangOpts.Sanitize.has(SanitizerKind::Thread)) PB.registerOptimizerLastEPCallback( @@ -1063,6 +1071,8 @@ CodeGenOpts.DebugPassManager); } } + if (Level == PassBuilder::O0) + MPM.addPass(addSanitizersAtO0()); } // FIXME: We still use the legacy pass manager to do code generation. We