From 0af459c36fb54c7db03cd179d68c4b3fc33959dc Mon Sep 17 00:00:00 2001 From: Abid Qadeer 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(); };