[mlir:GreedyDriver] Return WalkResult::skip after deleting a known constant

This avoids use-after-free when trying to access the regions after visiting
the operation.
This commit is contained in:
River Riddle 2022-05-18 02:14:02 -07:00
parent dd12c3433e
commit aa568e082b
1 changed files with 6 additions and 2 deletions

View File

@ -159,11 +159,15 @@ bool GreedyPatternRewriteDriver::simplify(MutableArrayRef<Region> regions) {
} }
} else { } else {
// Add all nested operations to the worklist in preorder. // Add all nested operations to the worklist in preorder.
for (auto &region : regions) for (auto &region : regions) {
region.walk<WalkOrder::PreOrder>([&](Operation *op) { region.walk<WalkOrder::PreOrder>([&](Operation *op) {
if (!insertKnownConstant(op)) if (!insertKnownConstant(op)) {
worklist.push_back(op); worklist.push_back(op);
return WalkResult::advance();
}
return WalkResult::skip();
}); });
}
// Reverse the list so our pop-back loop processes them in-order. // Reverse the list so our pop-back loop processes them in-order.
std::reverse(worklist.begin(), worklist.end()); std::reverse(worklist.begin(), worklist.end());