[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