[Mlir-commits] [mlir] [mlir] Better Python diagnostics (PR #128581)
Nikhil Kalra
llvmlistbot at llvm.org
Mon Mar 10 11:02:12 PDT 2025
https://github.com/nikalra updated https://github.com/llvm/llvm-project/pull/128581
>From c60f112c9bbcf75da8eb8946339098a840769bd8 Mon Sep 17 00:00:00 2001
From: Nikhil Kalra <nkalra at apple.com>
Date: Mon, 24 Feb 2025 11:34:40 -0800
Subject: [PATCH 01/11] functional changes
---
mlir/include/mlir/Bindings/Python/Diagnostics.h | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/mlir/include/mlir/Bindings/Python/Diagnostics.h b/mlir/include/mlir/Bindings/Python/Diagnostics.h
index ea80e14dde0f3..47914e4107ebd 100644
--- a/mlir/include/mlir/Bindings/Python/Diagnostics.h
+++ b/mlir/include/mlir/Bindings/Python/Diagnostics.h
@@ -10,6 +10,7 @@
#define MLIR_BINDINGS_PYTHON_DIAGNOSTICS_H
#include <cassert>
+#include <cstdint>
#include <string>
#include "mlir-c/Diagnostics.h"
@@ -45,6 +46,11 @@ class CollectDiagnosticsToStringScope {
mlirLocationPrint(loc, printer, data);
*static_cast<std::string *>(data) += ": ";
mlirDiagnosticPrint(diag, printer, data);
+ for (intptr_t i = 0; i < mlirDiagnosticGetNumNotes(diag); i++) {
+ *static_cast<std::string *>(data) += "\n";
+ MlirDiagnostic note = mlirDiagnosticGetNote(diag, i);
+ handler(note, data);
+ }
return mlirLogicalResultSuccess();
}
>From 6d09f001f3fcc4ef0d5f1f799819ac78adbe16cf Mon Sep 17 00:00:00 2001
From: Nikhil Kalra <nkalra at apple.com>
Date: Mon, 24 Feb 2025 13:21:43 -0800
Subject: [PATCH 02/11] make more efficient
---
.../mlir/Bindings/Python/Diagnostics.h | 27 ++++++++++---------
1 file changed, 15 insertions(+), 12 deletions(-)
diff --git a/mlir/include/mlir/Bindings/Python/Diagnostics.h b/mlir/include/mlir/Bindings/Python/Diagnostics.h
index 47914e4107ebd..4f9be844dc1ac 100644
--- a/mlir/include/mlir/Bindings/Python/Diagnostics.h
+++ b/mlir/include/mlir/Bindings/Python/Diagnostics.h
@@ -9,14 +9,14 @@
#ifndef MLIR_BINDINGS_PYTHON_DIAGNOSTICS_H
#define MLIR_BINDINGS_PYTHON_DIAGNOSTICS_H
+#include "mlir-c/Diagnostics.h"
+#include "mlir-c/IR.h"
+
#include <cassert>
#include <cstdint>
+#include <sstream>
#include <string>
-#include "mlir-c/Diagnostics.h"
-#include "mlir-c/IR.h"
-#include "llvm/ADT/StringRef.h"
-
namespace mlir {
namespace python {
@@ -29,25 +29,28 @@ class CollectDiagnosticsToStringScope {
/*deleteUserData=*/nullptr);
}
~CollectDiagnosticsToStringScope() {
- assert(errorMessage.empty() && "unchecked error message");
mlirContextDetachDiagnosticHandler(context, handlerID);
}
- [[nodiscard]] std::string takeMessage() { return std::move(errorMessage); }
+ [[nodiscard]] std::string takeMessage() {
+ std::ostringstream stream;
+ std::swap(stream, errorMessage);
+ return stream.str();
+ }
private:
static MlirLogicalResult handler(MlirDiagnostic diag, void *data) {
auto printer = +[](MlirStringRef message, void *data) {
- *static_cast<std::string *>(data) +=
- llvm::StringRef(message.data, message.length);
+ *static_cast<std::ostringstream *>(data)
+ << std::string_view(message.data, message.length);
};
MlirLocation loc = mlirDiagnosticGetLocation(diag);
- *static_cast<std::string *>(data) += "at ";
+ *static_cast<std::ostringstream *>(data) << "at ";
mlirLocationPrint(loc, printer, data);
- *static_cast<std::string *>(data) += ": ";
+ *static_cast<std::ostringstream *>(data) << ": ";
mlirDiagnosticPrint(diag, printer, data);
for (intptr_t i = 0; i < mlirDiagnosticGetNumNotes(diag); i++) {
- *static_cast<std::string *>(data) += "\n";
+ *static_cast<std::ostringstream *>(data) << "\n";
MlirDiagnostic note = mlirDiagnosticGetNote(diag, i);
handler(note, data);
}
@@ -56,7 +59,7 @@ class CollectDiagnosticsToStringScope {
MlirContext context;
MlirDiagnosticHandlerID handlerID;
- std::string errorMessage = "";
+ std::ostringstream errorMessage;
};
} // namespace python
>From 6afec89bb95990d91c8a8a6c88c78810024b0d37 Mon Sep 17 00:00:00 2001
From: Nikhil Kalra <nkalra at apple.com>
Date: Mon, 24 Feb 2025 13:21:54 -0800
Subject: [PATCH 03/11] capi to print stack trace on diagnostic
---
mlir/include/mlir-c/IR.h | 5 +++++
mlir/lib/CAPI/IR/IR.cpp | 4 ++++
2 files changed, 9 insertions(+)
diff --git a/mlir/include/mlir-c/IR.h b/mlir/include/mlir-c/IR.h
index 14ccae650606a..f661e90105704 100644
--- a/mlir/include/mlir-c/IR.h
+++ b/mlir/include/mlir-c/IR.h
@@ -162,6 +162,11 @@ MLIR_CAPI_EXPORTED bool mlirContextIsRegisteredOperation(MlirContext context,
MLIR_CAPI_EXPORTED void mlirContextSetThreadPool(MlirContext context,
MlirLlvmThreadPool threadPool);
+/// Sets the context to attach the stack trace for the source code location at
+/// which a diagnostic is emitted.
+MLIR_CAPI_EXPORTED void
+mlirContextPrintStackTraceOnDiagnostic(MlirContext context, bool enable);
+
//===----------------------------------------------------------------------===//
// Dialect API.
//===----------------------------------------------------------------------===//
diff --git a/mlir/lib/CAPI/IR/IR.cpp b/mlir/lib/CAPI/IR/IR.cpp
index 999e8cbda1295..2249519ad4eef 100644
--- a/mlir/lib/CAPI/IR/IR.cpp
+++ b/mlir/lib/CAPI/IR/IR.cpp
@@ -114,6 +114,10 @@ void mlirContextSetThreadPool(MlirContext context,
unwrap(context)->setThreadPool(*unwrap(threadPool));
}
+void mlirContextPrintStackTraceOnDiagnostic(MlirContext context, bool enable) {
+ unwrap(context)->printStackTraceOnDiagnostic(enable);
+}
+
//===----------------------------------------------------------------------===//
// Dialect API.
//===----------------------------------------------------------------------===//
>From 87cbc6c2624555b145a934bf1d33438af4e8ecc4 Mon Sep 17 00:00:00 2001
From: Nikhil Kalra <nkalra at apple.com>
Date: Mon, 24 Feb 2025 13:22:21 -0800
Subject: [PATCH 04/11] test to ensure diagnostics are logged
---
mlir/test/python/ir/diagnostic_handler.py | 14 ++++++++++++++
mlir/test/python/lib/PythonTestModuleNanobind.cpp | 12 ++++++++++++
2 files changed, 26 insertions(+)
diff --git a/mlir/test/python/ir/diagnostic_handler.py b/mlir/test/python/ir/diagnostic_handler.py
index d516cda819897..5f6696850682a 100644
--- a/mlir/test/python/ir/diagnostic_handler.py
+++ b/mlir/test/python/ir/diagnostic_handler.py
@@ -2,6 +2,7 @@
import gc
from mlir.ir import *
+from mlir._mlir_libs._mlirPythonTestNanobind import test_diagnostics_with_errors_and_notes
def run(f):
@@ -222,3 +223,16 @@ def callback2(d):
# CHECK: CALLBACK2: foobar
# CHECK: CALLBACK1: foobar
loc.emit_error("foobar")
+
+# CHECK-LABEL: TEST: testBuiltInDiagnosticsHandler
+ at run
+def testBuiltInDiagnosticsHandler():
+ ctx = Context()
+
+ try:
+ test_diagnostics_with_errors_and_notes(ctx)
+ except ValueError as e:
+ # CHECK: created error
+ # CHECK: MLIRPythonCAPI
+ print(e)
+
diff --git a/mlir/test/python/lib/PythonTestModuleNanobind.cpp b/mlir/test/python/lib/PythonTestModuleNanobind.cpp
index 99c81eae97a0c..daf3b4602b367 100644
--- a/mlir/test/python/lib/PythonTestModuleNanobind.cpp
+++ b/mlir/test/python/lib/PythonTestModuleNanobind.cpp
@@ -11,9 +11,12 @@
#include "PythonTestCAPI.h"
#include "mlir-c/BuiltinAttributes.h"
#include "mlir-c/BuiltinTypes.h"
+#include "mlir-c/Diagnostics.h"
#include "mlir-c/IR.h"
+#include "mlir/Bindings/Python/Diagnostics.h"
#include "mlir/Bindings/Python/Nanobind.h"
#include "mlir/Bindings/Python/NanobindAdaptors.h"
+#include "nanobind/nanobind.h"
namespace nb = nanobind;
using namespace mlir::python::nanobind_adaptors;
@@ -45,6 +48,15 @@ NB_MODULE(_mlirPythonTestNanobind, m) {
},
nb::arg("registry"));
+ m.def("test_diagnostics_with_errors_and_notes", [](MlirContext ctx) {
+ mlirContextPrintStackTraceOnDiagnostic(ctx, true);
+ mlir::python::CollectDiagnosticsToStringScope handler(ctx);
+
+ auto loc = mlirLocationUnknownGet(ctx);
+ mlirEmitError(loc, "created error");
+ throw nb::value_error(handler.takeMessage().c_str());
+ });
+
mlir_attribute_subclass(m, "TestAttr",
mlirAttributeIsAPythonTestTestAttribute,
mlirPythonTestTestAttributeGetTypeID)
>From 417ed76166c56aab561a1915df72b3ec5a6a24e9 Mon Sep 17 00:00:00 2001
From: Nikhil Kalra <nkalra at apple.com>
Date: Mon, 24 Feb 2025 16:35:00 -0800
Subject: [PATCH 05/11] formatting
---
mlir/test/python/ir/diagnostic_handler.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/mlir/test/python/ir/diagnostic_handler.py b/mlir/test/python/ir/diagnostic_handler.py
index 5f6696850682a..d82074690f1a4 100644
--- a/mlir/test/python/ir/diagnostic_handler.py
+++ b/mlir/test/python/ir/diagnostic_handler.py
@@ -2,7 +2,9 @@
import gc
from mlir.ir import *
-from mlir._mlir_libs._mlirPythonTestNanobind import test_diagnostics_with_errors_and_notes
+from mlir._mlir_libs._mlirPythonTestNanobind import (
+ test_diagnostics_with_errors_and_notes,
+)
def run(f):
@@ -224,6 +226,7 @@ def callback2(d):
# CHECK: CALLBACK1: foobar
loc.emit_error("foobar")
+
# CHECK-LABEL: TEST: testBuiltInDiagnosticsHandler
@run
def testBuiltInDiagnosticsHandler():
@@ -235,4 +238,3 @@ def testBuiltInDiagnosticsHandler():
# CHECK: created error
# CHECK: MLIRPythonCAPI
print(e)
-
>From 9538e20681ea197ce98c8764815367b7e3863ddf Mon Sep 17 00:00:00 2001
From: Nikhil Kalra <nkalra at apple.com>
Date: Tue, 25 Feb 2025 07:31:12 -0800
Subject: [PATCH 06/11] moved test impl
---
mlir/test/python/ir/diagnostic_handler.py | 4 ++--
mlir/test/python/lib/PythonTestCAPI.cpp | 8 ++++++++
mlir/test/python/lib/PythonTestCAPI.h | 3 +++
mlir/test/python/lib/PythonTestModuleNanobind.cpp | 3 +--
4 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/mlir/test/python/ir/diagnostic_handler.py b/mlir/test/python/ir/diagnostic_handler.py
index d82074690f1a4..6d273e5092e42 100644
--- a/mlir/test/python/ir/diagnostic_handler.py
+++ b/mlir/test/python/ir/diagnostic_handler.py
@@ -3,7 +3,7 @@
import gc
from mlir.ir import *
from mlir._mlir_libs._mlirPythonTestNanobind import (
- test_diagnostics_with_errors_and_notes,
+ test_diagnostics_with_errors_and_notes,
)
@@ -236,5 +236,5 @@ def testBuiltInDiagnosticsHandler():
test_diagnostics_with_errors_and_notes(ctx)
except ValueError as e:
# CHECK: created error
- # CHECK: MLIRPythonCAPI
+ # CHECK: attached note
print(e)
diff --git a/mlir/test/python/lib/PythonTestCAPI.cpp b/mlir/test/python/lib/PythonTestCAPI.cpp
index cb7d7677714fe..ee6a5ae2d9c3d 100644
--- a/mlir/test/python/lib/PythonTestCAPI.cpp
+++ b/mlir/test/python/lib/PythonTestCAPI.cpp
@@ -11,6 +11,8 @@
#include "mlir-c/BuiltinTypes.h"
#include "mlir/CAPI/Registration.h"
#include "mlir/CAPI/Wrap.h"
+#include "mlir/IR/Diagnostics.h"
+#include "mlir/IR/Location.h"
MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(PythonTest, python_test,
python_test::PythonTestDialect)
@@ -42,3 +44,9 @@ MlirTypeID mlirPythonTestTestTypeGetTypeID(void) {
bool mlirTypeIsAPythonTestTestTensorValue(MlirValue value) {
return mlirTypeIsATensor(wrap(unwrap(value).getType()));
}
+
+void mlirPythonTestEmitDiagnosticWithNote(MlirContext ctx) {
+ auto diag =
+ mlir::emitError(unwrap(mlirLocationUnknownGet(ctx)), "created error");
+ diag.attachNote() << "attached note";
+}
diff --git a/mlir/test/python/lib/PythonTestCAPI.h b/mlir/test/python/lib/PythonTestCAPI.h
index 43f8fdcbfae12..5ffd0cbf6201e 100644
--- a/mlir/test/python/lib/PythonTestCAPI.h
+++ b/mlir/test/python/lib/PythonTestCAPI.h
@@ -10,6 +10,7 @@
#define MLIR_TEST_PYTHON_LIB_PYTHONTESTCAPI_H
#include "mlir-c/IR.h"
+#include "mlir-c/Support.h"
#ifdef __cplusplus
extern "C" {
@@ -33,6 +34,8 @@ MLIR_CAPI_EXPORTED MlirTypeID mlirPythonTestTestTypeGetTypeID(void);
MLIR_CAPI_EXPORTED bool mlirTypeIsAPythonTestTestTensorValue(MlirValue value);
+MLIR_CAPI_EXPORTED void mlirPythonTestEmitDiagnosticWithNote(MlirContext ctx);
+
#ifdef __cplusplus
}
#endif
diff --git a/mlir/test/python/lib/PythonTestModuleNanobind.cpp b/mlir/test/python/lib/PythonTestModuleNanobind.cpp
index daf3b4602b367..4cfe84467fb22 100644
--- a/mlir/test/python/lib/PythonTestModuleNanobind.cpp
+++ b/mlir/test/python/lib/PythonTestModuleNanobind.cpp
@@ -52,8 +52,7 @@ NB_MODULE(_mlirPythonTestNanobind, m) {
mlirContextPrintStackTraceOnDiagnostic(ctx, true);
mlir::python::CollectDiagnosticsToStringScope handler(ctx);
- auto loc = mlirLocationUnknownGet(ctx);
- mlirEmitError(loc, "created error");
+ mlirPythonTestEmitDiagnosticWithNote(ctx);
throw nb::value_error(handler.takeMessage().c_str());
});
>From 6d8c1f4edc896172155c8bfb218263ad391fe43b Mon Sep 17 00:00:00 2001
From: Nikhil Kalra <nkalra at apple.com>
Date: Tue, 25 Feb 2025 07:31:41 -0800
Subject: [PATCH 07/11] Revert "capi to print stack trace on diagnostic"
This reverts commit 6afec89bb95990d91c8a8a6c88c78810024b0d37.
---
mlir/include/mlir-c/IR.h | 5 -----
mlir/lib/CAPI/IR/IR.cpp | 4 ----
2 files changed, 9 deletions(-)
diff --git a/mlir/include/mlir-c/IR.h b/mlir/include/mlir-c/IR.h
index f661e90105704..14ccae650606a 100644
--- a/mlir/include/mlir-c/IR.h
+++ b/mlir/include/mlir-c/IR.h
@@ -162,11 +162,6 @@ MLIR_CAPI_EXPORTED bool mlirContextIsRegisteredOperation(MlirContext context,
MLIR_CAPI_EXPORTED void mlirContextSetThreadPool(MlirContext context,
MlirLlvmThreadPool threadPool);
-/// Sets the context to attach the stack trace for the source code location at
-/// which a diagnostic is emitted.
-MLIR_CAPI_EXPORTED void
-mlirContextPrintStackTraceOnDiagnostic(MlirContext context, bool enable);
-
//===----------------------------------------------------------------------===//
// Dialect API.
//===----------------------------------------------------------------------===//
diff --git a/mlir/lib/CAPI/IR/IR.cpp b/mlir/lib/CAPI/IR/IR.cpp
index 2249519ad4eef..999e8cbda1295 100644
--- a/mlir/lib/CAPI/IR/IR.cpp
+++ b/mlir/lib/CAPI/IR/IR.cpp
@@ -114,10 +114,6 @@ void mlirContextSetThreadPool(MlirContext context,
unwrap(context)->setThreadPool(*unwrap(threadPool));
}
-void mlirContextPrintStackTraceOnDiagnostic(MlirContext context, bool enable) {
- unwrap(context)->printStackTraceOnDiagnostic(enable);
-}
-
//===----------------------------------------------------------------------===//
// Dialect API.
//===----------------------------------------------------------------------===//
>From 877eec9328968718bc780172fa93742a92941547 Mon Sep 17 00:00:00 2001
From: Nikhil Kalra <nkalra at apple.com>
Date: Tue, 25 Feb 2025 07:31:56 -0800
Subject: [PATCH 08/11] remove added api
---
mlir/test/python/lib/PythonTestModuleNanobind.cpp | 1 -
1 file changed, 1 deletion(-)
diff --git a/mlir/test/python/lib/PythonTestModuleNanobind.cpp b/mlir/test/python/lib/PythonTestModuleNanobind.cpp
index 4cfe84467fb22..dd0a9f2b66ea6 100644
--- a/mlir/test/python/lib/PythonTestModuleNanobind.cpp
+++ b/mlir/test/python/lib/PythonTestModuleNanobind.cpp
@@ -49,7 +49,6 @@ NB_MODULE(_mlirPythonTestNanobind, m) {
nb::arg("registry"));
m.def("test_diagnostics_with_errors_and_notes", [](MlirContext ctx) {
- mlirContextPrintStackTraceOnDiagnostic(ctx, true);
mlir::python::CollectDiagnosticsToStringScope handler(ctx);
mlirPythonTestEmitDiagnosticWithNote(ctx);
>From 0dd4a25406cd1f8141958101d6b27a99d71ceda9 Mon Sep 17 00:00:00 2001
From: Nikhil Kalra <nkalra at apple.com>
Date: Mon, 10 Mar 2025 10:59:35 -0700
Subject: [PATCH 09/11] use a llvm stream instead
---
.../mlir/Bindings/Python/Diagnostics.h | 24 +++++++++++--------
1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/mlir/include/mlir/Bindings/Python/Diagnostics.h b/mlir/include/mlir/Bindings/Python/Diagnostics.h
index 4f9be844dc1ac..d35e859970ac7 100644
--- a/mlir/include/mlir/Bindings/Python/Diagnostics.h
+++ b/mlir/include/mlir/Bindings/Python/Diagnostics.h
@@ -11,6 +11,7 @@
#include "mlir-c/Diagnostics.h"
#include "mlir-c/IR.h"
+#include "llvm/Support/raw_ostream.h"
#include <cassert>
#include <cstdint>
@@ -25,32 +26,33 @@ namespace python {
class CollectDiagnosticsToStringScope {
public:
explicit CollectDiagnosticsToStringScope(MlirContext ctx) : context(ctx) {
- handlerID = mlirContextAttachDiagnosticHandler(ctx, &handler, &errorMessage,
- /*deleteUserData=*/nullptr);
+ handlerID =
+ mlirContextAttachDiagnosticHandler(ctx, &handler, &messageStream,
+ /*deleteUserData=*/nullptr);
}
~CollectDiagnosticsToStringScope() {
mlirContextDetachDiagnosticHandler(context, handlerID);
}
[[nodiscard]] std::string takeMessage() {
- std::ostringstream stream;
- std::swap(stream, errorMessage);
- return stream.str();
+ std::string newMessage;
+ std::swap(message, newMessage);
+ return newMessage;
}
private:
static MlirLogicalResult handler(MlirDiagnostic diag, void *data) {
auto printer = +[](MlirStringRef message, void *data) {
- *static_cast<std::ostringstream *>(data)
+ *static_cast<llvm::raw_string_ostream *>(data)
<< std::string_view(message.data, message.length);
};
MlirLocation loc = mlirDiagnosticGetLocation(diag);
- *static_cast<std::ostringstream *>(data) << "at ";
+ *static_cast<llvm::raw_string_ostream *>(data) << "at ";
mlirLocationPrint(loc, printer, data);
- *static_cast<std::ostringstream *>(data) << ": ";
+ *static_cast<llvm::raw_string_ostream *>(data) << ": ";
mlirDiagnosticPrint(diag, printer, data);
for (intptr_t i = 0; i < mlirDiagnosticGetNumNotes(diag); i++) {
- *static_cast<std::ostringstream *>(data) << "\n";
+ *static_cast<llvm::raw_string_ostream *>(data) << "\n";
MlirDiagnostic note = mlirDiagnosticGetNote(diag, i);
handler(note, data);
}
@@ -59,7 +61,9 @@ class CollectDiagnosticsToStringScope {
MlirContext context;
MlirDiagnosticHandlerID handlerID;
- std::ostringstream errorMessage;
+
+ std::string message;
+ llvm::raw_string_ostream messageStream{message};
};
} // namespace python
>From 5b9bb0cd470a6c01fef6465a10a49d77451f457a Mon Sep 17 00:00:00 2001
From: Nikhil Kalra <nkalra at apple.com>
Date: Mon, 10 Mar 2025 11:00:57 -0700
Subject: [PATCH 10/11] remove unused include
---
mlir/include/mlir/Bindings/Python/Diagnostics.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/mlir/include/mlir/Bindings/Python/Diagnostics.h b/mlir/include/mlir/Bindings/Python/Diagnostics.h
index d35e859970ac7..443d39d172f68 100644
--- a/mlir/include/mlir/Bindings/Python/Diagnostics.h
+++ b/mlir/include/mlir/Bindings/Python/Diagnostics.h
@@ -15,7 +15,6 @@
#include <cassert>
#include <cstdint>
-#include <sstream>
#include <string>
namespace mlir {
>From 2d59eb17f2540bc75b3385b226c4385d6a1ad282 Mon Sep 17 00:00:00 2001
From: Nikhil Kalra <nkalra at apple.com>
Date: Mon, 10 Mar 2025 11:01:51 -0700
Subject: [PATCH 11/11] re-add assert
---
mlir/include/mlir/Bindings/Python/Diagnostics.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/mlir/include/mlir/Bindings/Python/Diagnostics.h b/mlir/include/mlir/Bindings/Python/Diagnostics.h
index 443d39d172f68..167002d561931 100644
--- a/mlir/include/mlir/Bindings/Python/Diagnostics.h
+++ b/mlir/include/mlir/Bindings/Python/Diagnostics.h
@@ -30,6 +30,7 @@ class CollectDiagnosticsToStringScope {
/*deleteUserData=*/nullptr);
}
~CollectDiagnosticsToStringScope() {
+ assert(message.empty() && "unchecked error message");
mlirContextDetachDiagnosticHandler(context, handlerID);
}
More information about the Mlir-commits
mailing list