On Fri, Mar 1, 2013 at 4:57 AM, Uros Bizjak <ubiz...@gmail.com> wrote: > > Due to the fact that libFFI does not handle C99 _Complex arguments > correctly [1], 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. Ian