i_divmod():  As discussed on Python-Dev, changed the overflow
checking to live happily with recent gcc optimizations that
assume signed integer arithmetic never overflows.
diff --git a/Objects/intobject.c b/Objects/intobject.c
index c7137df..b94e3e9 100644
--- a/Objects/intobject.c
+++ b/Objects/intobject.c
@@ -564,8 +564,14 @@
 				"integer division or modulo by zero");
 		return DIVMOD_ERROR;
 	}
-	/* (-sys.maxint-1)/-1 is the only overflow case. */
-	if (y == -1 && x < 0 && x == -x)
+	/* (-sys.maxint-1)/-1 is the only overflow case.  x is the most
+	 * negative long iff x < 0 and, on a 2's-complement box, x == -x.
+	 * However, -x is undefined (by C) if x /is/ the most negative long
+	 * (it's a signed overflow case), and some compilers care.  So we cast
+	 * x to unsigned long first.  However, then other compilers warn about
+	 * applying unary minus to an unsigned operand.  Hence the weird "0-".
+	 */
+	if (y == -1 && x < 0 && (unsigned long)x == 0-(unsigned long)x)
 		return DIVMOD_OVERFLOW;
 	xdivy = x / y;
 	xmody = x - xdivy * y;