Fix for SF bug 551412.  When _PyType_Lookup() is called on a type
whose tp_mro hasn't been initialized, it would dump core.  Fix this by
checking for NULL and calling PyType_Ready().  Will fix this in 2.2.1
too.
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index e7e4a8f..faa9d89 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -3019,7 +3019,23 @@
     except:
         raise TestFailed, "string subclass allowed as exception"
 
+def do_this_first():
+    if verbose:
+        print "Testing SF bug 551412 ..."
+    # This dumps core when SF bug 551412 isn't fixed --
+    # but only when test_descr.py is run separately.
+    # (That can't be helped -- as soon as PyType_Ready()
+    # is called for PyLong_Type, the bug is gone.)
+    class UserLong(object):
+        def __pow__(self, *args):
+            pass
+    try:
+        pow(0L, UserLong(), 0L)
+    except:
+        pass
+
 def test_main():
+    do_this_first()
     class_docstrings()
     lists()
     dicts()
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 61cbeae..af133ea 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -1221,6 +1221,12 @@
 
 	/* Look in tp_dict of types in MRO */
 	mro = type->tp_mro;
+	if (mro == NULL) {
+		if (PyType_Ready(type) < 0)
+			return NULL;
+		mro = type->tp_mro;
+		assert(mro != NULL);
+	}
 	assert(PyTuple_Check(mro));
 	n = PyTuple_GET_SIZE(mro);
 	for (i = 0; i < n; i++) {