[issue39632] variadic function call broken on armhf when passing a float argument
Nicolas Dessart added the comment: I've just rebased this PR but the CI builds failed (for unrelated reasons?). That being said I think that this particular issue should mostly be resolved by bpo-41100 and PR-22855 in particular. My PR 18560 still brings the support for Ellipsis/... inside ctypes function arguments type list. This is nice because it allows ctypes to automatically perform the necessary type promotions even if a variadic function is called without extra arguments. Since I've rebased my PR on top of bpo-41100 PRs, I had to resolve a few conflicts but didn't tried to limit the diff to the minimum (PR 18560 may be simplified). https://bugs.python.org/issue41100 https://github.com/python/cpython/pull/22855 -- versions: +Python 3.10, Python 3.11 ___ Python tracker <https://bugs.python.org/issue39632> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue39632] variadic function call broken on armhf when passing a float argument
Nicolas Dessart added the comment: As I said in the associated PR, the build is failing on macOS because ctypes uses an obsolete libffi version bundled into Modules/_ctypes/libffi_osx for this platform. This old version of libffi is missing ffi_prep_cif_var. There is an open issue that propose to remove the bundled libffi for OSX. https://bugs.python.org/issue28491 -- versions: -Python 2.7, Python 3.5, Python 3.6 ___ Python tracker <https://bugs.python.org/issue39632> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue39632] variadic function call broken on armhf when passing a float argument
Change by Nicolas Dessart : -- versions: +Python 2.7, Python 3.5, Python 3.6, Python 3.7, Python 3.8 ___ Python tracker <https://bugs.python.org/issue39632> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue39632] variadic function call broken on armhf when passing a float argument
Change by Nicolas Dessart : -- pull_requests: +17940 stage: -> patch review pull_request: https://github.com/python/cpython/pull/18560 ___ Python tracker <https://bugs.python.org/issue39632> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue39632] variadic function call broken on armhf when passing a float argument
Change by Nicolas Dessart : Removed file: https://bugs.python.org/file48895/ctypes_variadic_function_tests.diff ___ Python tracker <https://bugs.python.org/issue39632> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue39632] variadic function call broken on armhf when passing a float argument
Change by Nicolas Dessart : Added file: https://bugs.python.org/file48896/ctypes_variadic_function_tests.diff ___ Python tracker <https://bugs.python.org/issue39632> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue39632] variadic function call broken on armhf when passing a float argument
New submission from Nicolas Dessart : On armhf and for variadic functions (and contrary to non-variadic functions), the VFP co-processor registers are not used for float argument parameter passing. This specificity is apparently completely disregarded by ctypes which always uses `ffi_prep_cif` to prepare the parameter passing of a function while it should most probably use `ffi_prep_cif_var` for variadic functions. As such variadic function call with float arguments through ctypes is currently broken on armhf targets. I think that ctypes API should be updated to let the user specify if a function is variadic. I've attached a patch to the ctypes unit tests that I'm using to reproduce this bug. pi@raspberrypi:~/code/cpython $ ./python -m test test_ctypes 0:00:00 load avg: 0.00 Run tests sequentially 0:00:00 load avg: 0.00 [1/1] test_ctypes _testfunc_d_bhilfd_var got 2 3 4 -1242230680 -0.00 -0.00 test test_ctypes failed -- Traceback (most recent call last): File "/home/pi/code/cpython/Lib/ctypes/test/test_functions.py", line 146, in test_doubleresult_var self.assertEqual(result, 21) AssertionError: -7.086855952261741e-44 != 21 test_ctypes failed == Tests result: FAILURE == 1 test failed: test_ctypes Total duration: 3.8 sec Tests result: FAILURE -- components: ctypes files: ctypes_variadic_function_tests.diff keywords: patch messages: 361992 nosy: Nicolas Dessart priority: normal severity: normal status: open title: variadic function call broken on armhf when passing a float argument versions: Python 3.9 Added file: https://bugs.python.org/file48895/ctypes_variadic_function_tests.diff ___ Python tracker <https://bugs.python.org/issue39632> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com