[clang] [llvm] [Sanitizer] Make sanitizer passes idempotent (PR #99439)

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 26 15:32:22 PDT 2024


vitalybuka wrote:

> > @MaskRay can you talk more about your concerns? This won't affect compile time, and instrumenting a shadow load will cause an immediate crash of the application at runtime. This patch seems much more robust than counting on toolchains to always arrange to avoid double instrumentation.
> 
> From Eli: I'm a little skeptical that you pass pipeline is really doing what you want if you end up running sanitizer passes twice; that indicates you're running a bunch of other optimization passes twice without a good reason.
> 
> The other passes will affect compile time. There are many more instrumentation passes than sanitizers. I am concerned this leads us to the rabbit hole to add others (or others would blindly copy the pattern here, when the use cases aren't recommended/endorsed for other platforms).

If we wanted to prevent for real we'd implement a diagnostics. The current state looks worth the the state with the patch.

Maybe this way?
```
copt<bool> IgnoreRerundantIntrumentation;

bool checkIfAlreadyIntrumenter(string_view flag) {
  if (M.getModuleFlag(flag)) {
    if (IgnoreRerundantIntrumentation)
        return PreservedAnalyses::all();
     diag();
  }
  M.addModuleFlag(Module::ModFlagBehavior::Override, flag, 1);
}

::run() {
  if (checkIfAlreadyIntrumenter("my_sanitizer"))
    return;
}
```

https://github.com/llvm/llvm-project/pull/99439


More information about the llvm-commits mailing list