Commit 31c1320818

Andrew Kelley <andrew@ziglang.org>
2025-02-11 20:13:41
ZigLLVMTargetMachineEmitToFile: schedule sancov pass depending on mode
In debug mode, schedule it early. In release modes, schedule it late.
1 parent 4162f40
Changed files (1)
src/zig_llvm.cpp
@@ -311,19 +311,35 @@ ZIG_EXTERN_C bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machi
         }
     });
 
-    //pass_builder.registerOptimizerEarlyEPCallback([&](ModulePassManager &module_pm, OptimizationLevel OL) {
-    //});
-
-    pass_builder.registerOptimizerLastEPCallback([&](ModulePassManager &module_pm, OptimizationLevel level) {
-        // Code coverage instrumentation.
-        if (options->sancov) {
-            module_pm.addPass(SanitizerCoveragePass(getSanCovOptions(options->coverage)));
+    const bool early_san = options->is_debug;
+
+    pass_builder.registerOptimizerEarlyEPCallback([&](ModulePassManager &module_pm, OptimizationLevel OL) {
+        if (early_san) {
+            // Code coverage instrumentation.
+            if (options->sancov) {
+                module_pm.addPass(SanitizerCoveragePass(getSanCovOptions(options->coverage)));
+            }
+
+            // Thread sanitizer
+            if (options->tsan) {
+                module_pm.addPass(ModuleThreadSanitizerPass());
+                module_pm.addPass(createModuleToFunctionPassAdaptor(ThreadSanitizerPass()));
+            }
         }
+    });
 
-        // Thread sanitizer
-        if (options->tsan) {
-            module_pm.addPass(ModuleThreadSanitizerPass());
-            module_pm.addPass(createModuleToFunctionPassAdaptor(ThreadSanitizerPass()));
+    pass_builder.registerOptimizerLastEPCallback([&](ModulePassManager &module_pm, OptimizationLevel level) {
+        if (!early_san) {
+            // Code coverage instrumentation.
+            if (options->sancov) {
+                module_pm.addPass(SanitizerCoveragePass(getSanCovOptions(options->coverage)));
+            }
+
+            // Thread sanitizer
+            if (options->tsan) {
+                module_pm.addPass(ModuleThreadSanitizerPass());
+                module_pm.addPass(createModuleToFunctionPassAdaptor(ThreadSanitizerPass()));
+            }
         }
 
         // Verify the output