[Mlir-commits] [mlir] [mlir] Fix UB in comparator lambdas in getRegisteredOperationsByDialect (PR #186428)
Mehdi Amini
llvmlistbot at llvm.org
Fri Mar 13 09:11:55 PDT 2026
https://github.com/joker-eph updated https://github.com/llvm/llvm-project/pull/186428
>From 474798aefc7db0ef5c52e10bf6a2691f1c386a40 Mon Sep 17 00:00:00 2001
From: Mehdi Amini <joker.eph at gmail.com>
Date: Fri, 13 Mar 2026 08:03:57 -0700
Subject: [PATCH] [mlir] Fix comparator lambdas in
getRegisteredOperationsByDialect
Fix `getRegisteredOperationsByDialect` comparators to return `bool` instead of incorrectly using `StringRef::compare()` return values as booleans, which violated strict weak ordering.
Fixes #146940
Assisted-by: Claude Code
---
mlir/lib/IR/MLIRContext.cpp | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/mlir/lib/IR/MLIRContext.cpp b/mlir/lib/IR/MLIRContext.cpp
index 73219c6917061..5572a261d71f6 100644
--- a/mlir/lib/IR/MLIRContext.cpp
+++ b/mlir/lib/IR/MLIRContext.cpp
@@ -710,19 +710,20 @@ ArrayRef<RegisteredOperationName> MLIRContext::getRegisteredOperations() {
ArrayRef<RegisteredOperationName>
MLIRContext::getRegisteredOperationsByDialect(StringRef dialectName) {
auto *lowerBound = llvm::lower_bound(
- impl->sortedRegisteredOperations, dialectName, [](auto &lhs, auto &rhs) {
- return lhs.getDialect().getNamespace().compare(rhs);
+ impl->sortedRegisteredOperations, dialectName,
+ [](const RegisteredOperationName &lhs, StringRef rhs) {
+ return lhs.getDialect().getNamespace() < rhs;
});
if (lowerBound == impl->sortedRegisteredOperations.end() ||
lowerBound->getDialect().getNamespace() != dialectName)
return ArrayRef<RegisteredOperationName>();
- auto *upperBound =
- std::upper_bound(lowerBound, impl->sortedRegisteredOperations.end(),
- dialectName, [](auto &lhs, auto &rhs) {
- return lhs.compare(rhs.getDialect().getNamespace());
- });
+ auto *upperBound = std::upper_bound(
+ lowerBound, impl->sortedRegisteredOperations.end(), dialectName,
+ [](StringRef lhs, const RegisteredOperationName &rhs) {
+ return lhs < rhs.getDialect().getNamespace();
+ });
size_t count = std::distance(lowerBound, upperBound);
return ArrayRef(&*lowerBound, count);
@@ -998,8 +999,7 @@ void RegisteredOperationName::insert(
ctxImpl.sortedRegisteredOperations.insert(
llvm::upper_bound(ctxImpl.sortedRegisteredOperations, value,
[](auto &lhs, auto &rhs) {
- return lhs.getIdentifier().compare(
- rhs.getIdentifier());
+ return lhs.getIdentifier() < rhs.getIdentifier();
}),
value);
}
More information about the Mlir-commits
mailing list