]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-151422: Don't link libffi into _ctypes_test.so (#151423) main
authorHood Chatham <roberthoodchatham@gmail.com>
Mon, 15 Jun 2026 22:16:16 +0000 (15:16 -0700)
committerGitHub <noreply@github.com>
Mon, 15 Jun 2026 22:16:16 +0000 (06:16 +0800)
_ctypes_test doesn't use libffi directly, and linking it into the module
causes emscripten tests to fail.

Lib/test/test_ctypes/test_as_parameter.py
Lib/test/test_ctypes/test_structures.py
configure
configure.ac

index 2da1acfcf2989ee72425453459b48056d58df088..c9d728e9ae2f9cb290b854b99423b547a18df6bd 100644 (file)
@@ -5,7 +5,7 @@ from ctypes import (Structure, CDLL, CFUNCTYPE,
                     c_short, c_int, c_long, c_longlong,
                     c_byte, c_wchar, c_float, c_double,
                     ArgumentError)
-from test.support import import_helper, skip_if_sanitizer
+from test.support import import_helper, skip_if_sanitizer, skip_emscripten_stack_overflow
 _ctypes_test = import_helper.import_module("_ctypes_test")
 
 
@@ -193,6 +193,7 @@ class BasicWrapTestCase(unittest.TestCase):
                              (9*2, 8*3, 7*4, 6*5, 5*6, 4*7, 3*8, 2*9))
 
     @skip_if_sanitizer('requires deep stack', thread=True)
+    @skip_emscripten_stack_overflow()
     def test_recursive_as_param(self):
         class A:
             pass
index 92d4851d739d47ba3654b105462ef93b0101d74f..65ccc12625f72bee5fa7cf1e3ccefa4d0fd6333e 100644 (file)
@@ -299,9 +299,16 @@ class StructureTestCase(unittest.TestCase, StructCheckMixin):
         self.assertEqual(s.first, got.first)
         self.assertEqual(s.second, got.second)
 
+    @unittest.skipIf(support.is_wasm32, "wasm ABI is incompatible with test expectations")
     def _test_issue18060(self, Vector):
         # Regression tests for gh-62260
 
+        # This test passes a struct of two doubles by value to atan2(), whose C
+        # signature is atan2(double, double), so it only works on platforms
+        # where the abi of a function that takes a struct with two doubles
+        # matches the abi of a function that takes two doubles. The wasm32 ABI
+        # does not satisfy this condition and the test breaks.
+
         # The call to atan2() should succeed if the
         # class fields were correctly cloned in the
         # subclasses. Otherwise, it will segfault.
index 0cd98a193030dd52ef1a7e02e026c74876fb41b5..7608a0493b0ee62c2bb54fb09ed4b56d2187bfc3 100755 (executable)
--- a/configure
+++ b/configure
@@ -35116,8 +35116,8 @@ fi
   if test "x$py_cv_module__ctypes_test" = xyes
 then :
 
-    as_fn_append MODULE_BLOCK "MODULE__CTYPES_TEST_CFLAGS=$LIBFFI_CFLAGS$as_nl"
-    as_fn_append MODULE_BLOCK "MODULE__CTYPES_TEST_LDFLAGS=$LIBFFI_LIBS $LIBM$as_nl"
+
+    as_fn_append MODULE_BLOCK "MODULE__CTYPES_TEST_LDFLAGS=$LIBM$as_nl"
 
 fi
    if test "$py_cv_module__ctypes_test" = yes; then
index d3320f0e45fe1464233f2d7b346cfa62798e7f51..020861b4c823759148b1cf952f8b19acd8efe2c8 100644 (file)
@@ -8447,9 +8447,11 @@ PY_STDLIB_MOD([_testmultiphase], [test "$TEST_MODULES" = yes], [test "$ac_cv_fun
 PY_STDLIB_MOD([_testsinglephase], [test "$TEST_MODULES" = yes], [test "$ac_cv_func_dlopen" = yes])
 PY_STDLIB_MOD([xxsubtype], [test "$TEST_MODULES" = yes])
 PY_STDLIB_MOD([_xxtestfuzz], [test "$TEST_MODULES" = yes])
+dnl Check have_libffi so _ctypes_test is only built if _ctypes is built.
+dnl _ctypes_test doesn't use libffi directly.
 PY_STDLIB_MOD([_ctypes_test],
   [test "$TEST_MODULES" = yes], [test "$have_libffi" = yes -a "$ac_cv_func_dlopen" = yes],
-  [$LIBFFI_CFLAGS], [$LIBFFI_LIBS $LIBM])
+  [], [$LIBM])
 
 dnl Limited API template modules.
 dnl Emscripten does not support shared libraries yet.