changeset: 95118:aa79a04e9bf5 branch: 2.7 user: Serhiy Storchaka date: Sun Mar 22 09:45:35 2015 +0200 files: Objects/typeobject.c description: Issue #22079: Py3k warning now is issued in PyType_Ready() instead of raising TypeError when statically allocated type subclasses dynamically allocated type diff -r d0b497c86c60 -r aa79a04e9bf5 Objects/typeobject.c --- a/Objects/typeobject.c Sat Mar 21 22:04:42 2015 +0200 +++ b/Objects/typeobject.c Sun Mar 22 09:45:35 2015 +0200 @@ -4074,16 +4074,19 @@ } /* All bases of statically allocated type should be statically allocated */ - if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) + if (Py_Py3kWarningFlag && !(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) for (i = 0; i < n; i++) { PyObject *b = PyTuple_GET_ITEM(bases, i); if (PyType_Check(b) && (((PyTypeObject *)b)->tp_flags & Py_TPFLAGS_HEAPTYPE)) { - PyErr_Format(PyExc_TypeError, - "type '%.100s' is not dynamically allocated but " - "its base type '%.100s' is dynamically allocated", - type->tp_name, ((PyTypeObject *)b)->tp_name); - goto error; + char buf[300]; + PyOS_snprintf(buf, sizeof(buf), + "type '%.100s' is not dynamically allocated but " + "its base type '%.100s' is dynamically allocated", + type->tp_name, ((PyTypeObject *)b)->tp_name); + if (PyErr_WarnPy3k(buf, 1) < 0) + goto error; + break; } }