[Mlir-commits] [mlir] 6020a97 - [MLIR] Fix use-after-scope when interchanging ploops (#196076)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed May 6 07:01:10 PDT 2026
Author: Benjamin Kramer
Date: 2026-05-06T14:01:04Z
New Revision: 6020a97f68bb56349a68d99063a2ff41fda162dc
URL: https://github.com/llvm/llvm-project/commit/6020a97f68bb56349a68d99063a2ff41fda162dc
DIFF: https://github.com/llvm/llvm-project/commit/6020a97f68bb56349a68d99063a2ff41fda162dc.diff
LOG: [MLIR] Fix use-after-scope when interchanging ploops (#196076)
getInductionVars returns a SmallVector, so going through zip+reverse
gets us a dangling reference. Quite a footgun.
Found by asan.
Added:
Modified:
mlir/lib/Dialect/SCF/Transforms/ParallelLoopFusion.cpp
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/SCF/Transforms/ParallelLoopFusion.cpp b/mlir/lib/Dialect/SCF/Transforms/ParallelLoopFusion.cpp
index cbbe45a00163f..bdaade59e99df 100644
--- a/mlir/lib/Dialect/SCF/Transforms/ParallelLoopFusion.cpp
+++ b/mlir/lib/Dialect/SCF/Transforms/ParallelLoopFusion.cpp
@@ -748,8 +748,9 @@ static std::optional<ParallelOp> interchangeLoops(OpBuilder &builder,
loop.getUpperBound(), loop.getStep(),
loop.getInitVals(), nullptr);
IRMapping mapping;
- for (auto [iv, riv] : llvm::zip(loop.getInductionVars(),
- llvm::reverse(newOp.getInductionVars()))) {
+ auto ivs = loop.getInductionVars();
+ auto newIvs = newOp.getInductionVars();
+ for (auto [iv, riv] : llvm::zip(ivs, llvm::reverse(newIvs))) {
mapping.map(iv, riv);
}
// Copy parallel loop body
More information about the Mlir-commits
mailing list