[clang] [llvm] [OptBisect][IR] Adding a new OptPassGate for disabling passes via name (PR #145059)

Danila Malyutin via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 21 10:01:43 PDT 2025


================
@@ -1078,9 +1078,13 @@ void OptPassGateInstrumentation::registerCallbacks(
   if (!PassGate.isEnabled())
     return;
 
-  PIC.registerShouldRunOptionalPassCallback([this](StringRef PassName, Any IR) {
-    return this->shouldRun(PassName, IR);
-  });
+  PIC.registerShouldRunOptionalPassCallback(
+      [this, &PIC](StringRef ClassName, Any IR) {
+        StringRef PassName = PIC.getPassNameForClassName(ClassName);
+        if (PassName.empty())
----------------
danilaml wrote:

Our downstream code had hit an issue (sanitizer heap-use-after-free) with this code and I believe @snehasish concern was correct. In out case, we generate pass name dynamically (it's of the form `"PassName Step N" where N differs from run to run), so it's stored as a `std::string` instead of a string literal. So when `getPassNameForClassName` is called with such pass it creates an empty densemap entry with `StringRef` referring to the `std::string` name of our pass which is later destroyed leaving the reference dangling.

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


More information about the llvm-commits mailing list