zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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:
Msrc/zig_llvm.cpp | 38+++++++++++++++++++++++++++-----------
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