[PATCH, go] Passing Complex64 and Complex128 values via reflect.Call (using libffi) introduces ABI mismatch
Ian Lance Taylor
Fri Mar 1 14:43:00 GMT 2013
On Fri, Mar 1, 2013 at 4:57 AM, Uros Bizjak <firstname.lastname@example.org> wrote:
> Due to the fact that libFFI does not handle C99 _Complex arguments
> correctly , libgo passes Complex64 and Complex128 arguments via a
> temporary structure. However, passing parts of complex number in a
> structure is not the same as passing true C99 _Complex value, so this
> workaround introduces ABI mismatch between caller and callee. This
> mismatch results in wrong passed values of complex types.
> Fortunately all x86 ABIs tolerate this mismatch, but other targets
> (i.e. alpha) don't have this privilege.
Is there a PR open against libffi?
Do we have any idea which targets pass complex in a manner different
than a struct of two float/doubles? Your patch assumes that only x86
targets work, but I would expect that many targets work that way.
More information about the Gcc-patches