<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/90795>90795</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [Python Binding] error while printing a python generated module in c++
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          ravil-mobile
      </td>
    </tr>
</table>

<pre>
    Hi all,

I would like to build a small EDSL. The idea is to have the dsl frontend in python and handle lowering in c++.
Here is a small example:

```python
from mlir.ir import Context, Module, get_dialect_registry
from mlir.ir import InsertionPoint, Location, F32Type
from mlir.dialects import func, arith
from mlir.dialects import arith
from edsl_cpp import entry


def main():
  registry = get_dialect_registry()
  context = Context()
 context.append_dialect_registry(registry)
  module = None
  with context:
    module = Module.create(Location.unknown())
    with InsertionPoint(module.body), Location.unknown():
      fp_type = F32Type.get()
      function = func.FuncOp("test", ([fp_type, fp_type, fp_type], [fp_type]))
    
      with InsertionPoint(function.add_entry_block()) as block:
        one = function.arguments[0]
        two = function.arguments[1]
 mult_res = arith.MulFOp(one, two)
    
        three = function.arguments[2]
        res = arith.AddFOp(mult_res, three)
 func.ReturnOp([res])

  entry(module._CAPIPtr)


if __name__ == "__main__":
  main()
```

```cpp
#include <pybind11/pybind11.h>
#include "mlir/CAPI/IR.h"
#include "mlir-c/IR.h"
#include "mlir-c/RegisterEverything.h"
#include "mlir-c/Bindings/Python/Interop.h"
#include "mlir/CAPI/Support.h"
#include <stdexcept>

PYBIND11_MODULE(edsl_cpp, m) {
  m.doc() = "edsl python bindings";
  m.def("entry", [](pybind11::object capsule){
 MlirModule mlirModule = mlirPythonCapsuleToModule(capsule.ptr());
    if (mlirModuleIsNull(mlirModule)) {
      throw std::runtime_error("empty module");
    }
    MlirContext context = mlirModuleGetContext(mlirModule);
    if (mlirContextIsNull(context)) {
      throw std::runtime_error("empty context");
    }
    auto module = unwrap(mlirModule);
    mlir::AsmState state(module);
 module->dump();
  });
}
```

If necessary, I can share the whole source code. Anyway, when I am executing the python script I get the following error:

```bash
dialect has no registered type printing hook
UNREACHABLE executed at <path-to-llvm>/llvm-project/mlir/include/mlir/IR/Dialect.h:111!
```

Does anybody have an idea what is missing in my example?
I can dump a module in python without any problem by something is wrong in the cpp-part.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykV8tu47wOfhplQ9Rw5KRNF1nk0pwJ0HaKzszirAzZYmKdypIhyU3z9geS7DjpbX7gBwrDpT-RHy8iGWat2CvEOZkuyXQ9Yq2rtJkb9irkVa0LIXFUaH6c_xDApCR0RdI1SRfxuYWDbiUHKV4QnIaiFZIDA1szKeFu_es-gd8VguDIQFgPqdgrgqsQuJWwM1o5VByEguboKq2AKQ4VU1wiSH1AI9Tefy0JXRK6TKLdH2jQ6-st4RurG4kkW5yzI9dp_Iuqo3BndA21FCYRBkTdaONg5Vm8OUJX8KB5K9G_7dHlXDCJpcsN7oV15vi1iq2yaJzQ6kkLFTTd65J5gX_fZPT3scH3xzv1tleya1Xp4cwIV_0N_B6E3Mq8bJr-O6oT4fMnxx3UTChCZ4TeniIG0PsIJFt_7nw80cHLGLOAPsXvDNB9T1jToOKfKRteT0rrEP2g81Er7MUH4ape4RnjC3xMXFIaZA4JnfXhT1r1ovSh93ew1al9n7hZ1Jn4og8Hhky-U3VOBGDX5O7YRC5dupM9XsYkAltVem0B6f9JNq0qfzYBSR1aRyj1Zr1guuz0esEnr9N1QA4wL7j08tz25x73jBLGeR7KJi-kLl9OIQNmIUoufQbQCk9-RBVm39aonCXTZerZXMDdQX8NHw_wupW-VGwAh0JPHlq5CUHydUFXXtWXbgK4yuA3zOgHZpfGFpxHYz2RYNHrHGyG1D2ja42KyZsuPTAm4OzCQXcTT5WVrxZP2ydn3uHiU-wgzxWrMc89H0-JUJrn_srmua-MIQVn1_iy333aBMum6SQ0E6qULfcBWjXHQig-HhO66V-TimR3H7GU-j5E6MbzJ3SzfU4qT-gL4FX5DzHPoQ-guXtFc3SVUPu_n1kKxYXaW0I3T7G5081WOTS6-fbwwP5X2_g2-QU6W1nH8a3Exg2xCM-n_y63j-vxOH_4uf5zf0forG-8vkZqf1vIzfKUooTrMuYIulx6eD_sipMblGTnh3AX20FXOrS75aG6ZqeUZQuSLXTxPywdlKyxYXLdDuYfpDCxL4YR8jB0S_9vDNwqnvut-8k36zQljS_RvmkO7ADEzvemQePWPrZ-NTgTdX3jLBLdrdQHsI5H5qZVTtSYozHadP7WjTt2bT24fWmZ3JxdW-9dN3kuptHA4j_ohtF0Se5zfzr0yaF-5vwrb05KvneHtU6fD7RWHQxrviUeKjoYX9j6l2MOwbo4_uqPB6LoimR3vK2bfoid1HkyZ4ITt0-7ynYHCku0lvnyXMEWSqbAVszE5e5QaYlgdWtKhFJzTGChjgcWwIcKFWyB1YBvWLbOr3j-UHcpbGlE42Drl5Ag32kp9cGjYmy_2PIKZrt9qFs2oGIWlO42GzTIIYzoxggVjFZav8QTfx6f7xarH4vl_V1HCjkwFxokc9WV01dSvta-F9CNf7tqjPb3jtBN11e63jEIts-EbtaRim-pi7HvsuNvorrWaIGpo9894qLMVNydDxVzfuGthbXdRlwfh7V306_jPgs-u8D6Uho2az_8deu8AWiMLiTWUBzB6hpD1_X6D0ZH7T7uZdNcNcy4ZMTnGb_NbtkI5-Ob8eQ6nUym6aias2J8zejNbTlJr2k2K_hkwmm6m8wKSjG7piMxpymdpNN0TLM0naYJn-7KWTmdjcvyGmlWkkmKNRMy8UFNtNmPhLUtzm_Tm9vpSLICpQ2_TShVeIDw0d-k6Xpk5iERRbu3ZJJKYZ0dtDjhZPhRE7scdAODTNexiOBQCXlWCqyP0h4VGubTPwSw-_Exao2cV8411pcg3RC62QtXtUVS6rqri4_lESj7QRVc-n8AAAD__56gHgA">