Inexplicably, recurse_down_subclasses() was comparing the object
gotten from a weak reference to NULL instead of to None.  This caused
the following assert() to fail (but only in 2.2 in the debug build --
I have to find a better test case).  Will backport.
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index b9890ea..0051179 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -4029,7 +4029,8 @@
 		ref = PyList_GET_ITEM(subclasses, i);
 		assert(PyWeakref_CheckRef(ref));
 		subclass = (PyTypeObject *)PyWeakref_GET_OBJECT(ref);
-		if (subclass == NULL)
+		assert(subclass != NULL);
+		if ((PyObject *)subclass == Py_None)
 			continue;
 		assert(PyType_Check(subclass));
 		/* Avoid recursing down into unaffected classes */