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

Abid Qadeer via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 15 09:43:26 PDT 2025


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

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.

>From 0af459c36fb54c7db03cd179d68c4b3fc33959dc Mon Sep 17 00:00:00 2001
From: Abid Qadeer <haqadeer at amd.com>
Date: Tue, 15 Jul 2025 17:26:56 +0100
Subject: [PATCH] [OMPIRBuilder] Prevent dangling InsertPt in IRBuilder.

There are places in PostOutlineCB callbacks where the instruction is
deleted while InsertPt in the IRBuilder pointed to it causing 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.
---
 llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

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();
   };



More information about the llvm-commits mailing list