On Fri, Feb 17, 2012 at 2:12 PM, Simon Marlow <marlo...@gmail.com> wrote: > On 17/02/12 19:36, John Meacham wrote: >> >> It isn't local to a file though because it changes the ABI, for instance >> >> void foo(off_t *x); >> >> it will blow up if called from a file with a differently sized off_t. > > > But we're talking about Haskell code here, not C code. There's no way for > something to "blow up", the typechecker will catch any discrepancies. > > Perhaps I don't understand what problem you're thinking of - can you give > more detail?
Someone writes a C function that returns an off_t * that is foreign imported by a haskell program using Ptr COff, the haskell program then writes to the output pointer with the COff Storable instance. However the imported function was compiled without 64 bit off_t's so it only allocated 32 bits to be written into so some other memory gets overwritten with garbage. 64 bit off_t's change the ABI of called C functions much like passing -m32 or -mrtd does so should be considered a all-or-nothing sort of thing. In particular, when ghc compiles C code, it should make sure it does it with the same ABI flags as the rest of the thing being compiled. John environment as the rest of the code. _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users