Skip to content

Commit 0af459c

Browse files
committed
[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 llvm#148284.
1 parent 455105f commit 0af459c

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2155,9 +2155,11 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::createTask(
21552155
OutlinedFn.getArg(1)->replaceUsesWithIf(
21562156
Shareds, [Shareds](Use &U) { return U.getUser() != Shareds; });
21572157
}
2158-
2159-
for (Instruction *I : llvm::reverse(ToBeDeleted))
2158+
for (Instruction *I : llvm::reverse(ToBeDeleted)) {
2159+
if (I->getIterator() == Builder.GetInsertPoint())
2160+
Builder.SetInsertPoint(I->getParent());
21602161
I->eraseFromParent();
2162+
}
21612163
};
21622164

21632165
addOutlineInfo(std::move(OI));
@@ -7714,6 +7716,7 @@ OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::emitTargetTask(
77147716
Builder.CreateCall(TaskFn, {Ident, ThreadID, TaskData});
77157717
}
77167718

7719+
Builder.SetInsertPoint(StaleCI->getParent());
77177720
StaleCI->eraseFromParent();
77187721
for (Instruction *I : llvm::reverse(ToBeDeleted))
77197722
I->eraseFromParent();
@@ -9511,6 +9514,7 @@ OpenMPIRBuilder::createTeams(const LocationDescription &Loc,
95119514
omp::RuntimeFunction::OMPRTL___kmpc_fork_teams),
95129515
Args);
95139516

9517+
Builder.SetInsertPoint(StaleCI->getParent());
95149518
for (Instruction *I : llvm::reverse(ToBeDeleted))
95159519
I->eraseFromParent();
95169520
};

0 commit comments

Comments
 (0)