[llvm] [OMPIRBuilder] Prevent dangling InsertPt in IRBuilder. (PR #148887)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 15 09:44:01 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-flang-openmp

Author: Abid Qadeer (abidh)

<details>
<summary>Changes</summary>

There are places in `PostOutlineCB` callbacks where the instruction is deleted while `InsertPt` in the `IRBuilder` pointed to it causing a dangling `InsertPt`. This PR fixes that by ensuring that the `InsertPt` is always valid.

This fixes the sanitizer fail that was seen in https://github.com/llvm/llvm-project/pull/148284.

---
Full diff: https://github.com/llvm/llvm-project/pull/148887.diff


1 Files Affected:

- (modified) llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp (+6-2) 


``````````diff
diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
index 4f08ea97378c2..a3e0d7c89357b 100644
--- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
@@ -2155,9 +2155,11 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createTask(
       OutlinedFn.getArg(1)->replaceUsesWithIf(
           Shareds, [Shareds](Use &U) { return U.getUser() != Shareds; });
     }
-
-    for (Instruction *I : llvm::reverse(ToBeDeleted))
+    for (Instruction *I : llvm::reverse(ToBeDeleted)) {
+      if (I->getIterator() == Builder.GetInsertPoint())
+        Builder.SetInsertPoint(I->getParent());
       I->eraseFromParent();
+    }
   };
 
   addOutlineInfo(std::move(OI));
@@ -7714,6 +7716,7 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::emitTargetTask(
       Builder.CreateCall(TaskFn, {Ident, ThreadID, TaskData});
     }
 
+    Builder.SetInsertPoint(StaleCI->getParent());
     StaleCI->eraseFromParent();
     for (Instruction *I : llvm::reverse(ToBeDeleted))
       I->eraseFromParent();
@@ -9511,6 +9514,7 @@ OpenMPIRBuilder::createTeams(const LocationDescription &Loc,
                            omp::RuntimeFunction::OMPRTL___kmpc_fork_teams),
                        Args);
 
+    Builder.SetInsertPoint(StaleCI->getParent());
     for (Instruction *I : llvm::reverse(ToBeDeleted))
       I->eraseFromParent();
   };

``````````

</details>


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


More information about the llvm-commits mailing list