[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