Index: Objects/abstract.c =================================================================== --- Objects/abstract.c (revision 66570) +++ Objects/abstract.c (working copy) @@ -268,16 +268,16 @@ PyObject_CheckReadBuffer(PyObject *obj) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; + Py_buffer view; if (pb == NULL || pb->bf_getbuffer == NULL) return 0; - if ((*pb->bf_getbuffer)(obj, NULL, PyBUF_SIMPLE) == -1) { + if ((*pb->bf_getbuffer)(obj, &view, PyBUF_SIMPLE) == -1) { PyErr_Clear(); return 0; } - if (*pb->bf_releasebuffer != NULL) - (*pb->bf_releasebuffer)(obj, NULL); + PyBuffer_Release(&view); return 1; } Index: Lib/test/test_builtin.py =================================================================== --- Lib/test/test_builtin.py (revision 66570) +++ Lib/test/test_builtin.py (working copy) @@ -242,6 +242,7 @@ compile(source='pass', filename='?', mode='exec') compile(dont_inherit=0, filename='tmp', source='0', mode='eval') compile('pass', '?', dont_inherit=1, mode='exec') + compile(memoryview(b"text"), "name", "exec") self.assertRaises(TypeError, compile) self.assertRaises(ValueError, compile, 'print(42)\n', '', 'badmode') self.assertRaises(ValueError, compile, 'print(42)\n', '', 'single', 0xff)