Vinay Sajip added the comment: I'm learning a bit about Linux calling conventions :-)
But it also works when a 16-byte array is followed by 2 ints; if the two ints are removed, then it fails again. ctypes sets elements up in the first case to be a FFI_TYPE_POINTER slot followed by two slots of FFI_TYPE_SINT32, and classify_argument seemingly does the right thing. But remove the two integers, and classify_argument seems to not do the right thing. Isn't this looking like a problem in classify_argument? In the first case: p *stgdict->ffi_type_pointer.elements[0] $3 = {size = 8, alignment = 8, type = 14, elements = 0x0} p *stgdict->ffi_type_pointer.elements[1] $4 = {size = 4, alignment = 4, type = 10, elements = 0x0} p *stgdict->ffi_type_pointer.elements[2] $5 = {size = 4, alignment = 4, type = 10, elements = 0x0} p stgdict->ffi_type_pointer.elements[3] $6 = (struct _ffi_type *) 0x0 and the second case: p *stgdict->ffi_type_pointer.elements[0] $2 = {size = 8, alignment = 8, type = 14, elements = 0x0} p stgdict->ffi_type_pointer.elements[1] $3 = (struct _ffi_type *) 0x0 It's like this on the way into ffi_call (can't step into it at the moment). ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue22273> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com