diff --git a/src/wrap_cl.hpp b/src/wrap_cl.hpp index b4d168314493a05815bbe90f76bd350d25f1e60b..9111fd12919bf271221898685d799388c2aeac70 100644 --- a/src/wrap_cl.hpp +++ b/src/wrap_cl.hpp @@ -445,8 +445,22 @@ namespace pyopencl void get(PyObject *obj, int flags) { +#ifdef PYPY_VERSION + // work around https://bitbucket.org/pypy/pypy/issues/2873 + if (flags & PyBUF_ANY_CONTIGUOUS) + { + int flags_wo_cont = flags & ~PyBUF_ANY_CONTIGUOUS; + if (PyObject_GetBuffer(obj, &m_buf, flags_wo_cont | PyBUF_C_CONTIGUOUS)) + { + PyErr_Clear(); + if (PyObject_GetBuffer(obj, &m_buf, flags_wo_cont | PyBUF_F_CONTIGUOUS)) + throw py::error_already_set(); + } + } +#else if (PyObject_GetBuffer(obj, &m_buf, flags)) throw py::error_already_set(); +#endif m_initialized = true; }