- SF patch 751998 fixes an unwanted side effect of the previous fix
  for SF bug 742860 (the next item).
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 248345e..df9e617 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -638,18 +638,17 @@
 	--_PyTrash_delete_nesting;
 	_PyObject_GC_TRACK(self); /* We'll untrack for real later */
 
-	/* Find the nearest base with a different tp_dealloc
-	   and clear slots while we're at it */
+	/* Find the nearest base with a different tp_dealloc */
 	base = type;
 	while ((basedealloc = base->tp_dealloc) == subtype_dealloc) {
-		if (base->ob_size)
-			clear_slots(base, self);
 		base = base->tp_base;
 		assert(base);
 	}
 
 	/* If we added a weaklist, we clear it.  Do this *before* calling
-	   the finalizer (__del__) or clearing the instance dict. */
+	   the finalizer (__del__), clearing slots, or clearing the instance
+	   dict. */
+
 	if (type->tp_weaklistoffset && !base->tp_weaklistoffset)
 		PyObject_ClearWeakRefs(self);
 
@@ -660,6 +659,15 @@
 			goto endlabel;
 	}
 
+	/*  Clear slots up to the nearest base with a different tp_dealloc */
+	base = type;
+	while ((basedealloc = base->tp_dealloc) == subtype_dealloc) {
+		if (base->ob_size)
+			clear_slots(base, self);
+		base = base->tp_base;
+		assert(base);
+	}
+
 	/* If we added a dict, DECREF it */
 	if (type->tp_dictoffset && !base->tp_dictoffset) {
 		PyObject **dictptr = _PyObject_GetDictPtr(self);