You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee=Noneclosed_at=Nonecreated_at=<Date2020-02-14.10:03:28.170>labels= ['3.8', '3.9', '3.10', '3.11', 'ctypes', '3.7']
title='variadic function call broken on armhf when passing a float argument'updated_at=<Date2021-07-23.09:26:19.255>user='https://github.com/ndessart'
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.000000 -0.000000
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_varself.assertEqual(result, 21)
AssertionError: -7.086855952261741e-44 != 21
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.
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).
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: