[PATCH] D52814: [PassManager/Sanitizer] Enable usage of ported AddressSanitizer passes with -fsanitize=address
Leonard Chan via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 4 12:24:30 PDT 2018
leonardchan added a comment.
In https://reviews.llvm.org/D52814#1254901, @philip.pfaffe wrote:
> Is this the right place in the pipeline to put the passes? The legacy PM inserts the asan passes at EP_OptimizerLast, why not do the same thing?
I noticed this also and thought adding this using `registerScalarOptimizerLateEPCallback` was the initial correct way to add this function pass, but it seems that the vector of callbacks this gets added to (`ScalarOptimizerLateEPCallbacks` in `buildFunctionSimplificationPipeline`) doesn't get called unless some sort of optimization is requested (that is I run with `-fexperimental-new-pass-manager -fsanitize=address -O1`) when the sanitizer should still be applied even without optimization.
We could force this pipeline to be run if we run `PB.buildPerModuleDefaultPipeline()`regardless of the optimization level, but I don't know why it's only called if optimization is zero.
================
Comment at: lib/CodeGen/BackendUtil.cpp:1031-1038
+ MPM.addPass(AddressSanitizerModulePass());
+
+ // Add Function Pass
+ CGSCCPassManager MainCGPipeline(CodeGenOpts.DebugPassManager);
+ MainCGPipeline.addPass(createCGSCCToFunctionPassAdaptor(
+ buildAddressSanitizerPipeline(CodeGenOpts.DebugPassManager)));
+ MPM.addPass(
----------------
fedor.sergeev wrote:
> I dont believe CGSCC is appropriate here.
>
> I would expect to see a simple ModuleToFunction adapter, something like this:
>
> MPM.addPass(AddressSanitizerModulePass());
> MPM.addPass(createModuleToFunctionPassAdaptor(AddressSanitizerFunctionPass())
>
> Also, it seems that legacy runs Function sanitizer first and then Module sanitizer after it.
> This sequence does it backwards. Is it intentional?
My bad. I didn't see there was a `createModuleToFunctionPassAdaptor` earlier and used CGSCC since that seemed to be how other function passes were added to the module.
I also wasn't sure if the order mattered since it seems both passes can be run independently of each other and provide different instrumentation. I think @vitalybuka might be able to answer that better, Regardless, I switched them still so Module runs after Function.
Repository:
rC Clang
https://reviews.llvm.org/D52814
More information about the cfe-commits
mailing list