Tim chastens:

    Barry, that comment belongs in the code, not in the checkin msg.
    The code *used* to do this correctly (as you well know, since you
    & I went thru considerable pain to fix this the first time).
    However, because the *reason* for the convolution wasn't recorded
    in the code as a comment, somebody threw it all away the first
    time it got reworked.

    c-code-isn't-often-self-explanatory-ly y'rs  - tim

default_3way_compare(): Stick the checkin message from 2.110 in a
comment.
diff --git a/Objects/object.c b/Objects/object.c
index e2a019f..91531e0 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -524,7 +524,11 @@
 	int c;
 
 	if (v->ob_type == w->ob_type) {
-		/* same type: compare pointers */
+		/* When comparing these pointers, they must be cast to
+		 * integer types (i.e. Py_uintptr_t, our spelling of C9X's
+		 * uintptr_t).  ANSI specifies that pointer compares other
+		 * than == and != to non-related structures are undefined.
+		 */
 		Py_uintptr_t vv = (Py_uintptr_t)v;
 		Py_uintptr_t ww = (Py_uintptr_t)w;
 		return (vv < ww) ? -1 : (vv > ww) ? 1 : 0;