Correct removal of redundant moves
The logic for removing while iterating is non-standard and a left over from a previous index based loop. This patch replaces it with a standard erase based version. This fixes a runtime crash with MSVC that invalidates the iterator and then asserts. This also makes the code safe in case the last move can be redundant. Change-Id: Ie6990e0d65a3b83a4b7da3e2e89ed4e60a6cd215 Reviewed-on: https://chromium-review.googlesource.com/c/1488762 Reviewed-by: Ben Titzer <titzer@chromium.org> Commit-Queue: Ben Titzer <titzer@chromium.org> Cr-Commit-Position: refs/heads/master@{#59868}
This commit is contained in:
parent
561aaa3066
commit
385aa80aff
1
AUTHORS
1
AUTHORS
@ -46,6 +46,7 @@ Alexander Botero-Lowry <alexbl@FreeBSD.org>
|
||||
Alexander Karpinsky <homm86@gmail.com>
|
||||
Alexandre Vassalotti <avassalotti@gmail.com>
|
||||
Alexis Campailla <alexis@janeasystems.com>
|
||||
Allan Sandfeld Jensen <allan.jensen@qt.io>
|
||||
Amos Lim <eui-sang.lim@samsung.com>
|
||||
Andreas Anyuru <andreas.anyuru@gmail.com>
|
||||
Andrew Paprocki <andrew@ishiboo.com>
|
||||
|
@ -96,8 +96,7 @@ void GapResolver::Resolve(ParallelMove* moves) {
|
||||
for (auto it = moves->begin(); it != moves->end();) {
|
||||
MoveOperands* move = *it;
|
||||
if (move->IsRedundant()) {
|
||||
*it = moves->back();
|
||||
moves->pop_back();
|
||||
it = moves->erase(it);
|
||||
continue;
|
||||
}
|
||||
source_kinds.Add(GetKind(move->source()));
|
||||
|
Loading…
Reference in New Issue
Block a user