]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-121938: ctypes: Skip test of _pack_-ed struct with c_int64 on x86 (GH-125877)
authorPetr Viktorin <encukou@gmail.com>
Wed, 23 Oct 2024 21:37:06 +0000 (23:37 +0200)
committerGitHub <noreply@github.com>
Wed, 23 Oct 2024 21:37:06 +0000 (16:37 -0500)
The current auto-generated tests don't cover this; it's instead
tested manually.

Lib/test/test_ctypes/test_generated_structs.py

index cbd73c4e911e4eb040576b1d9378809fdcb987f5..d61754d6d49e70c2a010c9dd86b9178a920804db 100644 (file)
@@ -135,6 +135,18 @@ class Packed3(Structure):
 
 @register()
 class Packed4(Structure):
+    def _maybe_skip():
+        # `_pack_` enables MSVC-style packing, but keeps platform-specific
+        # alignments.
+        # The C code we generate for GCC/clang currently uses
+        # `__attribute__((ms_struct))`, which activates MSVC layout *and*
+        # alignments, that is, sizeof(basic type) == alignment(basic type).
+        # On a Pentium, int64 is 32-bit aligned, so the two won't match.
+        # The expected behavior is instead tested in
+        # StructureTestCase.test_packed, over in test_structures.py.
+        if sizeof(c_int64) != alignment(c_int64):
+            raise unittest.SkipTest('cannot test on this platform')
+
     _fields_ = [('a', c_int8), ('b', c_int64)]
     _pack_ = 8
 
@@ -436,6 +448,8 @@ class GeneratedTest(unittest.TestCase):
         """
         for name, cls in TESTCASES.items():
             with self.subTest(name=name):
+                if _maybe_skip := getattr(cls, '_maybe_skip', None):
+                    _maybe_skip()
                 expected = iter(_ctypes_test.get_generated_test_data(name))
                 expected_name = next(expected)
                 if expected_name is None: