test_pickle works on sizeof(long)==8 boxes again.
pickle.py
    The code implicitly assumed that all ints fit in 4 bytes, causing all
    sorts of mischief (from nonsense results to corrupted pickles).
    Repaired that.
marshal.c
    The int marshaling code assumed that right shifts of signed longs
    sign-extend.  Repaired that.
diff --git a/Python/marshal.c b/Python/marshal.c
index 1b9ab9a..120c3fa 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -126,7 +126,7 @@
 	else if (PyInt_Check(v)) {
 		long x = PyInt_AS_LONG((PyIntObject *)v);
 #if SIZEOF_LONG > 4
-		long y = x>>31;
+		long y = Py_ARITHMETIC_RIGHT_SHIFT(long, x, 31);
 		if (y && y != -1) {
 			w_byte(TYPE_INT64, p);
 			w_long64(x, p);