diff --git a/mlir/include/mlir/Bindings/Python/NanobindAdaptors.h b/mlir/include/mlir/Bindings/Python/NanobindAdaptors.h index 847951ab5fd46..6594670abaaa7 100644 --- a/mlir/include/mlir/Bindings/Python/NanobindAdaptors.h +++ b/mlir/include/mlir/Bindings/Python/NanobindAdaptors.h @@ -181,14 +181,22 @@ struct type_caster { bool from_python(handle src, uint8_t flags, cleanup_list *cleanup) noexcept { if (src.is_none()) { // Gets the current thread-bound context. - // TODO: This raises an error of "No current context" currently. - // Update the implementation to pretty-print the helpful error that the - // core implementations print in this case. src = mlir::python::irModule().attr("Context").attr("current"); } - std::optional capsule = mlirApiObjectToCapsule(src); - value = mlirPythonCapsuleToContext(capsule->ptr()); - return !mlirContextIsNull(value); + // If there is no context, including thread-bound, emit a warning (since + // this function is not allowed to throw) and fail to cast. + if (src.is_none()) { + PyErr_Warn( + PyExc_RuntimeWarning, + "Passing None as MLIR Context is only allowed inside " + "the " MAKE_MLIR_PYTHON_QUALNAME("ir.Context") " context manager."); + return false; + } + if (std::optional capsule = mlirApiObjectToCapsule(src)) { + value = mlirPythonCapsuleToContext(capsule->ptr()); + return !mlirContextIsNull(value); + } + return false; } }; diff --git a/mlir/test/python/dialects/pdl_types.py b/mlir/test/python/dialects/pdl_types.py index 16a41e2a4c1ce..dfba2a36b8980 100644 --- a/mlir/test/python/dialects/pdl_types.py +++ b/mlir/test/python/dialects/pdl_types.py @@ -148,3 +148,16 @@ def test_value_type(): print(parsedType) # CHECK: !pdl.value print(constructedType) + + +# CHECK-LABEL: TEST: test_type_without_context +@run +def test_type_without_context(): + # Constructing a type without the surrounding ir.Context context manager + # should raise an exception but not crash. + try: + constructedType = pdl.ValueType.get() + except TypeError: + pass + else: + assert False, "Expected TypeError to be raised."