marshal.c r_long64:  When reading a TYPE_INT64 value on a box with 32-bit
ints, convert to PyLong (rather than throwing away the high-order 32 bits).
diff --git a/Lib/test/test_marshal.py b/Lib/test/test_marshal.py
new file mode 100644
index 0000000..38b3cd4
--- /dev/null
+++ b/Lib/test/test_marshal.py
@@ -0,0 +1,41 @@
+from test_support import TestFailed
+import marshal
+import sys
+
+# XXX Much more needed here.
+
+# Test the full range of Python ints.
+n = sys.maxint
+while n:
+    for expected in (-n, n):
+        s = marshal.dumps(expected)
+        got = marshal.loads(s)
+        if expected != got:
+            raise TestFailed("for int %d, marshal string is %r, loaded "
+                             "back as %d" % (expected, s, got))
+    n = n >> 1
+
+# Simulate int marshaling on a 64-bit box.  This is most interesting if
+# we're running the test on a 32-bit box, of course.
+
+def to_little_endian_string(value, nbytes):
+    bytes = []
+    for i in range(nbytes):
+        bytes.append(chr(value & 0xff))
+        value >>= 8
+    return ''.join(bytes)
+
+maxint64 = (1L << 63) - 1
+minint64 = -maxint64-1
+
+for base in maxint64, minint64, -maxint64, -(minint64 >> 1):
+    while base:
+        s = 'I' + to_little_endian_string(base, 8)
+        got = marshal.loads(s)
+        if base != got:
+            raise TestFailed("for int %d, simulated marshal string is %r, "
+                             "loaded back as %d" % (base, s, got))
+        if base == -1:  # a fixed-point for shifting right 1
+            base = 0
+        else:
+            base >>= 1