commit 31c132081857b126524ccd261da331c9b1bda856 (tree)
parent 4162f401cbaa2013eae8fa518cf255ce4c5c952b
Author: Andrew Kelley <andrew@ziglang.org>
Date: Tue, 11 Feb 2025 11:13:41 -0800
ZigLLVMTargetMachineEmitToFile: schedule sancov pass depending on mode
In debug mode, schedule it early. In release modes, schedule it late.
Diffstat:
1 file changed, 27 insertions(+), 11 deletions(-)
diff --git a/src/zig_llvm.cpp b/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