[Mlir-commits] [mlir] [mlir] Expand error message to include unregistered dialects. (PR #158028)

Mehdi Amini llvmlistbot at llvm.org
Fri Sep 12 06:45:13 PDT 2025


================
@@ -2077,9 +2077,45 @@ OperationParser::parseCustomOperation(ArrayRef<ResultRecord> resultIDs) {
         diag << " (tried '" << opName << "' as well)";
       auto &note = diag.attachNote();
       note << "Registered dialects: ";
-      llvm::interleaveComma(getContext()->getAvailableDialects(), note,
-                            [&](StringRef dialect) { note << dialect; });
-      note << " ; for more info on dialect registration see "
+      std::vector<StringRef> registered = getContext()->getAvailableDialects();
+      auto loaded = getContext()->getLoadedDialects();
+
+      // Merge the sorted lists of registered and loaded dialects.
+      SmallVector<std::pair<StringRef, bool>> mergedDialects;
+      auto regIt = registered.begin(), regEnd = registered.end();
+      auto loadIt = loaded.rbegin(), loadEnd = loaded.rend();
+      bool isRegistered = false;
+      bool isOnlyLoaded = true;
+      while (regIt != regEnd && loadIt != loadEnd) {
+        StringRef reg = *regIt;
+        StringRef load = (*loadIt)->getNamespace();
+        if (reg < load) {
+          mergedDialects.emplace_back(*regIt++, isRegistered);
+        } else if (load < reg) {
+          mergedDialects.emplace_back(load, isOnlyLoaded);
+          loadIt++;
+        } else {
+          mergedDialects.emplace_back(*regIt++, isRegistered);
+          loadIt++;
+        }
----------------
joker-eph wrote:

```suggestion
        if (load < reg) {
          mergedDialects.emplace_back(load, isOnlyLoaded);
          ++loadIt;
        } else {
          mergedDialects.emplace_back(reg, isRegistered);
          ++regIt;
          if (reg == load)
            ++loadIt;
        }
```

Just a suggestion, I was trying various refactor to help readability of this loop.


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


More information about the Mlir-commits mailing list