mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-01 07:30:31 +00:00
[AArch64] fix an invalid-iterator-use bug.
Summary: In AArch64PromoteConstant::appendAndTransferDominatedUses, `InsertPts[NewPt]` invalidates IPI. Therefore, `InsertPts[NewPt] = std::move(IPI->second)` is not legal. This was caught by running `make check` with http://reviews.llvm.org/D7931. Reviewers: t.p.northover, grosbach, bkramer Reviewed By: bkramer Subscribers: aemerson, llvm-commits Differential Revision: http://reviews.llvm.org/D7988 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230923 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
bd06347b1a
commit
6e125c1adb
@ -189,9 +189,11 @@ private:
|
||||
IPI->second.push_back(&Use);
|
||||
// Transfer the dominated uses of IPI to NewPt
|
||||
// Inserting into the DenseMap may invalidate existing iterator.
|
||||
// Keep a copy of the key to find the iterator to erase.
|
||||
// Keep a copy of the key to find the iterator to erase. Keep a copy of the
|
||||
// value so that we don't have to dereference IPI->second.
|
||||
Instruction *OldInstr = IPI->first;
|
||||
InsertPts[NewPt] = std::move(IPI->second);
|
||||
Uses OldUses = std::move(IPI->second);
|
||||
InsertPts[NewPt] = std::move(OldUses);
|
||||
// Erase IPI.
|
||||
InsertPts.erase(OldInstr);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user