diff options
Diffstat (limited to 'src/zig_llvm.cpp')
| -rw-r--r-- | src/zig_llvm.cpp | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/src/zig_llvm.cpp b/src/zig_llvm.cpp index 53a0faba8a..51fd4aa0a5 100644 --- 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 |
