[Mlir-commits] [mlir] Fix llvm-mlir-use-after-erase findings (PR #210733)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Mon Jul 27 08:14:57 PDT 2026
https://github.com/Harald-R updated https://github.com/llvm/llvm-project/pull/210733
>From 48d79b0b4341d2f96aa33d011f00af0e378eeb01 Mon Sep 17 00:00:00 2001
From: Harald-R <rotuna.razvan at gmail.com>
Date: Mon, 20 Jul 2026 12:52:09 +0300
Subject: [PATCH] Fix llvm-mlir-use-after-erase findings
---
mlir/lib/Bytecode/Reader/BytecodeReader.cpp | 4 ++--
.../MemRef/Transforms/NormalizeMemRefs.cpp | 20 ++++++++++---------
.../Transforms/Utils/DialectConversion.cpp | 3 +--
3 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/mlir/lib/Bytecode/Reader/BytecodeReader.cpp b/mlir/lib/Bytecode/Reader/BytecodeReader.cpp
index 96ead28d0aa40..5c54738dbed96 100644
--- a/mlir/lib/Bytecode/Reader/BytecodeReader.cpp
+++ b/mlir/lib/Bytecode/Reader/BytecodeReader.cpp
@@ -1648,10 +1648,10 @@ class mlir::BytecodeReader::Impl {
return failure();
continue;
}
- op->dropAllReferences();
- op->erase();
lazyLoadableOps.pop_front();
lazyLoadableOpsMap.erase(op);
+ op->dropAllReferences();
+ op->erase();
}
return success();
}
diff --git a/mlir/lib/Dialect/MemRef/Transforms/NormalizeMemRefs.cpp b/mlir/lib/Dialect/MemRef/Transforms/NormalizeMemRefs.cpp
index fa7991e6c6a80..23591dd045f78 100644
--- a/mlir/lib/Dialect/MemRef/Transforms/NormalizeMemRefs.cpp
+++ b/mlir/lib/Dialect/MemRef/Transforms/NormalizeMemRefs.cpp
@@ -301,14 +301,15 @@ void NormalizeMemRefs::updateFunctionSignature(func::FuncOp funcOp,
// If it failed (due to escapes for example), bail out.
// It should never hit this part of the code because it is called by
// only those functions which are normalizable.
- newCallOp->erase();
replacingMemRefUsesFailed = true;
break;
}
returnTypeChanged = true;
}
- if (replacingMemRefUsesFailed)
+ if (replacingMemRefUsesFailed) {
+ newCallOp->erase();
continue;
+ }
// Replace all uses for other non-memref result types.
userOp->replaceAllUsesWith(newCallOp);
userOp->erase();
@@ -456,17 +457,18 @@ void NormalizeMemRefs::normalizeFuncOpMemRefs(func::FuncOp funcOp,
/*userFilterFn=*/nullptr,
/*allowNonDereferencingOps=*/true,
/*replaceInDeallocOp=*/true))) {
- newOp->erase();
replacingMemRefUsesFailed = true;
- continue;
+ break;
}
}
- if (!replacingMemRefUsesFailed) {
- // Replace other ops with new op and delete the old op when the
- // replacement succeeded.
- op->replaceAllUsesWith(newOp);
- op->erase();
+ if (replacingMemRefUsesFailed) {
+ newOp->erase();
+ return;
}
+ // Replace other ops with new op and delete the old op when the
+ // replacement succeeded.
+ op->replaceAllUsesWith(newOp);
+ op->erase();
}
}
});
diff --git a/mlir/lib/Transforms/Utils/DialectConversion.cpp b/mlir/lib/Transforms/Utils/DialectConversion.cpp
index c76e3808d3b37..c8db49c226e43 100644
--- a/mlir/lib/Transforms/Utils/DialectConversion.cpp
+++ b/mlir/lib/Transforms/Utils/DialectConversion.cpp
@@ -2696,8 +2696,7 @@ LogicalResult OperationLegalizer::legalizeWithFold(Operation *op) {
"op '" + opName +
"' folder rollback of IR modifications requested");
}
- rewriterImpl.resetState(
- curState, std::string(op->getName().getStringRef()) + " folder");
+ rewriterImpl.resetState(curState, std::string(opName) + " folder");
return failure();
}
}
More information about the Mlir-commits
mailing list