diff options
author | Andrew Kaylor <andrew.kaylor@intel.com> | 2016-12-14 19:30:18 +0000 |
---|---|---|
committer | Andrew Kaylor <andrew.kaylor@intel.com> | 2016-12-14 19:30:18 +0000 |
commit | ce3bcae6321b23f49547a563c4fe986eafca4d95 (patch) | |
tree | d5bbb5e85616ec4518ccff211fc750aed58f1578 /llvm/lib/CodeGen | |
parent | f02d9b8325b8c85e8347a7d2ec82d02749d8df5b (diff) | |
download | bcm5719-llvm-ce3bcae6321b23f49547a563c4fe986eafca4d95.tar.gz bcm5719-llvm-ce3bcae6321b23f49547a563c4fe986eafca4d95.zip |
[WinEH] Avoid holding references to BlockColor (DenseMap) entries while inserting new elements
Differential Revision: https://reviews.llvm.org/D27693
llvm-svn: 289694
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/WinEHPrepare.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/WinEHPrepare.cpp b/llvm/lib/CodeGen/WinEHPrepare.cpp index 8b81a48a7b1..568720c66e5 100644 --- a/llvm/lib/CodeGen/WinEHPrepare.cpp +++ b/llvm/lib/CodeGen/WinEHPrepare.cpp @@ -1202,8 +1202,12 @@ void WinEHPrepare::replaceUseWithLoad(Value *V, Use &U, AllocaInst *&SpillSlot, Goto->setSuccessor(0, PHIBlock); CatchRet->setSuccessor(NewBlock); // Update the color mapping for the newly split edge. + // Grab a reference to the ColorVector to be inserted before getting the + // reference to the vector we are copying because inserting the new + // element in BlockColors might cause the map to be reallocated. + ColorVector &ColorsForNewBlock = BlockColors[NewBlock]; ColorVector &ColorsForPHIBlock = BlockColors[PHIBlock]; - BlockColors[NewBlock] = ColorsForPHIBlock; + ColorsForNewBlock = ColorsForPHIBlock; for (BasicBlock *FuncletPad : ColorsForPHIBlock) FuncletBlocks[FuncletPad].push_back(NewBlock); // Treat the new block as incoming for load insertion. |