[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:
Andrew Kaylor 2015-11-12 17:36:03 +00:00
parent d0663f3a4e
commit 2aca944a0e

View File

@ -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;