mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-30 15:10:33 +00:00
CodeGen: Avoid getNodePtrUnchecked() where we need a Value, NFC
`ilist_iterator<NodeTy>::getNodePtrUnchecked()` is documented as being for internal use only, but CodeGenPrepare was using it anyway. This code relies on pulling out the `Value*` pointer even after the lifetime of the iterator is over. But having this pointer available in ilist_iterator depends on UB in the first place. Instead, safely pull out the `Value*` when the iterator is alive and stop using the internal-only API. There should be no functionality change here. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@261493 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
be77f42278
commit
2d6fcba17e
@ -1773,13 +1773,14 @@ bool CodeGenPrepare::optimizeCallInst(CallInst *CI, bool& ModifiedDT) {
|
||||
// Substituting this can cause recursive simplifications, which can
|
||||
// invalidate our iterator. Use a WeakVH to hold onto it in case this
|
||||
// happens.
|
||||
WeakVH IterHandle(&*CurInstIterator);
|
||||
Value *CurValue = &*CurInstIterator;
|
||||
WeakVH IterHandle(CurValue);
|
||||
|
||||
replaceAndRecursivelySimplify(CI, RetVal, TLInfo, nullptr);
|
||||
|
||||
// If the iterator instruction was recursively deleted, start over at the
|
||||
// start of the block.
|
||||
if (IterHandle != CurInstIterator.getNodePtrUnchecked()) {
|
||||
if (IterHandle != CurValue) {
|
||||
CurInstIterator = BB->begin();
|
||||
SunkAddrs.clear();
|
||||
}
|
||||
@ -3945,12 +3946,13 @@ bool CodeGenPrepare::optimizeMemoryInst(Instruction *MemoryInst, Value *Addr,
|
||||
if (Repl->use_empty()) {
|
||||
// This can cause recursive deletion, which can invalidate our iterator.
|
||||
// Use a WeakVH to hold onto it in case this happens.
|
||||
WeakVH IterHandle(&*CurInstIterator);
|
||||
Value *CurValue = &*CurInstIterator;
|
||||
WeakVH IterHandle(CurValue);
|
||||
BasicBlock *BB = CurInstIterator->getParent();
|
||||
|
||||
RecursivelyDeleteTriviallyDeadInstructions(Repl, TLInfo);
|
||||
|
||||
if (IterHandle != CurInstIterator.getNodePtrUnchecked()) {
|
||||
if (IterHandle != CurValue) {
|
||||
// If the iterator instruction was recursively deleted, start over at the
|
||||
// start of the block.
|
||||
CurInstIterator = BB->begin();
|
||||
|
Loading…
Reference in New Issue
Block a user