From: Vitaly Buka Date: Wed, 27 Apr 2022 23:16:39 +0000 (-0700) Subject: [mlir] Don't iterate mutable user list X-Git-Tag: upstream/15.0.7~9138 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6e1ac68a0c73546c989e2440943e4786d328f718;p=platform%2Fupstream%2Fllvm.git [mlir] Don't iterate mutable user list executeOp.operandsMutable().append(asyncTokens) in addAsyncDependencyAfter can resize and invalidate iterators. Fixes reports like https://reviews.llvm.org/P8286 Reviewed By: herhut Differential Revision: https://reviews.llvm.org/D124577 --- diff --git a/mlir/lib/Dialect/GPU/Transforms/AsyncRegionRewriter.cpp b/mlir/lib/Dialect/GPU/Transforms/AsyncRegionRewriter.cpp index 5e60696..0832fcb 100644 --- a/mlir/lib/Dialect/GPU/Transforms/AsyncRegionRewriter.cpp +++ b/mlir/lib/Dialect/GPU/Transforms/AsyncRegionRewriter.cpp @@ -208,7 +208,9 @@ struct GpuAsyncRegionPass::DeferWaitCallback { // Add the async dependency to each user of the `async.execute` token. auto asyncTokens = executeOp.getResults().take_back(dependencies.size()); - for (Operation *user : executeOp.token().getUsers()) + SmallVector users(executeOp.token().user_begin(), + executeOp.token().user_end()); + for (Operation *user : users) addAsyncDependencyAfter(asyncTokens, user); } }