[Mlir-commits] [mlir] [MLIR] Fix use-after-move issues (PR #165660)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Wed Oct 29 23:12:51 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-mlir-core

Author: Slava Gurevich (noclowns)

<details>
<summary>Changes</summary>

This patch addresses two use-after-move issues:

1. `Timing.cpp` A variable was std::moved and then immediately passed to an `assert()` check. Since the moved-from state made the assertion condition trivially true, the check was effectively useless. The `assert()` is removed.

2. `Query.cpp` The `matcher` object was moved-from and then subsequently used as if it still retained valid state. The fix removes the `std::move` to preserve the original object. It is possible to restructure the surrounding logic to maintain the move semantics, but doing so would reduce clarity. If needed, such restructuring can be considered later based on performance profiling.

Testing:
`ninja check-mlir`

---
Full diff: https://github.com/llvm/llvm-project/pull/165660.diff


2 Files Affected:

- (modified) mlir/lib/Query/Query.cpp (+1-1) 
- (modified) mlir/lib/Support/Timing.cpp (-1) 


``````````diff
diff --git a/mlir/lib/Query/Query.cpp b/mlir/lib/Query/Query.cpp
index 375e82050a481..f391734def000 100644
--- a/mlir/lib/Query/Query.cpp
+++ b/mlir/lib/Query/Query.cpp
@@ -121,7 +121,7 @@ LogicalResult MatchQuery::run(llvm::raw_ostream &os, QuerySession &qs) const {
   Operation *rootOp = qs.getRootOp();
   int matchCount = 0;
   matcher::MatchFinder finder;
-  auto matches = finder.collectMatches(rootOp, std::move(matcher));
+  auto matches = finder.collectMatches(rootOp, matcher);
 
   // An extract call is recognized by considering if the matcher has a name.
   // TODO: Consider making the extract more explicit.
diff --git a/mlir/lib/Support/Timing.cpp b/mlir/lib/Support/Timing.cpp
index fb6f82c283df5..16306d72815f7 100644
--- a/mlir/lib/Support/Timing.cpp
+++ b/mlir/lib/Support/Timing.cpp
@@ -319,7 +319,6 @@ class TimerImpl {
   void mergeChildren(AsyncChildrenMap &&other) {
     for (auto &thread : other) {
       mergeChildren(std::move(thread.second));
-      assert(thread.second.empty());
     }
     other.clear();
   }

``````````

</details>


https://github.com/llvm/llvm-project/pull/165660


More information about the Mlir-commits mailing list