Issue #4228: Pack negative values the same way as 2.4
in struct's L format.
diff --git a/Lib/test/test_struct.py b/Lib/test/test_struct.py
index 7ecb6ac..f135150 100644
--- a/Lib/test/test_struct.py
+++ b/Lib/test/test_struct.py
@@ -3,6 +3,8 @@
 import struct
 import array
 import warnings
+warnings.filterwarnings("ignore", "struct integer overflow masking is deprecated",
+                        DeprecationWarning)
 
 import sys
 ISBIGENDIAN = sys.byteorder == "big"
@@ -535,6 +537,17 @@
 
 test_1530559()
 
+## Issue 4228. Packing a negative unsigned long warns,
+# but then still should give a value with the
+# topmost bit set.
+
+def test_issue4228():
+    # Packing a long may yield either 32 or 64 bits
+    x = struct.pack('L', -1)[:4]
+    vereq(x, '\xff'*4)
+
+test_issue4228()
+
 ###########################################################################
 # Packing and unpacking to/from buffers.