From: Robert Bradshaw Date: Sat, 12 Dec 2009 05:54:46 +0000 (-0800) Subject: Warning for extern type import size mismatch. X-Git-Tag: 0.12.1~41 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=feee1a225bfaee7745886d6eec77804353681747;p=cython.git Warning for extern type import size mismatch. --- diff --git a/Cython/Compiler/ModuleNode.py b/Cython/Compiler/ModuleNode.py index 8a6f9585..25b25b4c 100644 --- a/Cython/Compiler/ModuleNode.py +++ b/Cython/Compiler/ModuleNode.py @@ -445,6 +445,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): code.putln(" #define PyInt_AsSsize_t(o) PyInt_AsLong(o)") code.putln(" #define PyNumber_Index(o) PyNumber_Int(o)") code.putln(" #define PyIndex_Check(o) PyNumber_Check(o)") + code.putln(" #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)") code.putln("#endif") code.putln("#if PY_VERSION_HEX < 0x02060000") @@ -2166,7 +2167,7 @@ static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class PyObject *py_module = 0; PyObject *result = 0; PyObject *py_name = 0; - int size_ok; + char warning[200]; py_module = __Pyx_ImportModule(module_name); if (!py_module) @@ -2191,13 +2192,13 @@ static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class module_name, class_name); goto bad; } - if (strict) { - size_ok = ((PyTypeObject *)result)->tp_basicsize == size; - } - else { - size_ok = ((PyTypeObject *)result)->tp_basicsize >= size; + if (!strict && ((PyTypeObject *)result)->tp_basicsize > size) { + PyOS_snprintf(warning, sizeof(warning), + "%s.%s size changed, may indicate binary incompatibility", + module_name, class_name); + PyErr_WarnEx(NULL, warning, 0); } - if (!size_ok) { + else if (((PyTypeObject *)result)->tp_basicsize != size) { PyErr_Format(PyExc_ValueError, "%s.%s has the wrong size, try recompiling", module_name, class_name);