mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-03 01:06:05 +00:00
[WinEH] Fix problem with removing an element from a SetVector while iterating.
Patch provided by Yaron Keren. (Thanks!) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@252913 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d0663f3a4e
commit
2aca944a0e
@ -1665,18 +1665,12 @@ void WinEHPrepare::cloneCommonBlocks(
|
||||
|
||||
// Remove this block from the FuncletBlocks set of any funclet that
|
||||
// isn't the funclet whose color we just selected.
|
||||
for (auto It = BlockColors[BB].begin(), End = BlockColors[BB].end();
|
||||
It != End; ) {
|
||||
// The iterator must be incremented here because we are removing
|
||||
// elements from the set we're walking.
|
||||
auto Temp = It++;
|
||||
BasicBlock *ContainingFunclet = *Temp;
|
||||
if (ContainingFunclet != CorrectColor) {
|
||||
for (BasicBlock *ContainingFunclet : BlockColors[BB])
|
||||
if (ContainingFunclet != CorrectColor)
|
||||
FuncletBlocks[ContainingFunclet].erase(BB);
|
||||
BlockColors[BB].remove(ContainingFunclet);
|
||||
}
|
||||
}
|
||||
|
||||
BlockColors[BB].remove_if([&](BasicBlock *ContainingFunclet) {
|
||||
return ContainingFunclet != CorrectColor;
|
||||
});
|
||||
// This should leave just one color for BB.
|
||||
assert(BlockColors[BB].size() == 1);
|
||||
continue;
|
||||
|
Loading…
x
Reference in New Issue
Block a user