[clang] [clang][fatlto] Only run sanitzer passes in prelink pipelines (PR #160213)

Nikita Popov via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 26 01:45:08 PDT 2025


================
@@ -700,7 +700,12 @@ static void addSanitizers(const Triple &TargetTriple,
                           const CodeGenOptions &CodeGenOpts,
                           const LangOptions &LangOpts, PassBuilder &PB) {
   auto SanitizersCallback = [&](ModulePassManager &MPM, OptimizationLevel Level,
-                                ThinOrFullLTOPhase) {
+                                ThinOrFullLTOPhase phase) {
+    // FatLTO pipelines already added these to the prelink pipeline.
+    if (CodeGenOpts.FatLTO &&
+        (CodeGenOpts.PrepareForThinLTO || CodeGenOpts.PrepareForLTO) &&
+        ThinOrFullLTOPhase::None != phase)
----------------
nikic wrote:

Hm... I think this condition is too specific and fragile. Have you checked that this also works for the `-flto=thin` variant? Because I believe that one is going to use `ThinOrFullLTOPhase::ThinLTOPostLink` here.

I think the correct way to fix this is to just check for a non-post-link phase here (without any checks for other options) and to adjust https://github.com/llvm/llvm-project/blob/8c122e5d3bcbdd82c34a406c6d3029060306521a/llvm/lib/Passes/PassBuilderPipelines.cpp#L1727 to pass one of the post-link phases.

https://github.com/llvm/llvm-project/pull/160213


More information about the cfe-commits mailing list