The object returned by tp_new() may not have a tp_init.

If the object is an ExtensionClass, for example, the slot is not even
defined.  So we must check that the type has the slot (implied by
HAVE_CLASS) before calling tp_init().
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index a7263d8..31a7c3d 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -199,7 +199,8 @@
 		if (!PyType_IsSubtype(obj->ob_type, type))
 			return obj;
 		type = obj->ob_type;
-		if (type->tp_init != NULL &&
+		if (PyType_HasFeature(type, Py_TPFLAGS_HAVE_CLASS) &&
+		    type->tp_init != NULL &&
 		    type->tp_init(obj, args, kwds) < 0) {
 			Py_DECREF(obj);
 			obj = NULL;