Type promotion in ccall arguments
Fergus Henderson
fjh at cs.mu.OZ.AU
Fri Mar 22 15:52:25 EST 2002
On 14-Mar-2002, Simon Marlow <simonmar at microsoft.com> wrote:
> I can't remember whether this has come up before, but to my surprise
> I've just discovered that FFI foreign import declarations don't contain
> enough infomration to be able to determine the correct calling
> convention for a given C function.
>
> Background: recently we "fixed" a bug in GHC's native code generator
> which was exposed by the following declaration:
>
> foreign import ccall unsafe
> snprintf :: CString -> CSize -> CString -> Float -> IO ()
I don't see how interfacing with a varargs function as if it had a
fixed prototype can ever be completely portable. C permits the calling
convention to be different for varargs functions, and sometimes this is
indeed desirable for efficiency: varargs functions require caller-pops
argument passing convention, but known-prototype functions can use a
more efficient callee-pops convention. Some C compilers have taken
advantage of this.
--
Fergus Henderson <fjh at cs.mu.oz.au> | "I have always known that the pursuit
The University of Melbourne | of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh> | -- the last words of T. S. Garp.
More information about the FFI
mailing list