Of course, this ignores the detail that while the C compilers are generating correct code, they may also be generating warnings about alleged type errors - which can be a bit disconcerting.
It is an error, not just a warning, if the prototypes don't match. GCC will complain loudly if there's a missing 'const' - it won't generate any code at all.
Well, if you disable the warning by giving gcc a consistent story, then the code is correct. (To give gcc a consistent story, don't #include any user or system-supplied headers and make sure gcc doesn't silently #include any of its own (as it likes to do).)
I don't think it's possible to completely eliminate system headers from the transitive closure of stuff we include when compiling a .hc file. I've just taken a look at this, and it seems that while we can eliminate a lot of the stuff we include, there are some awkward ones: we need gmp.h for Integer operations, and that includes <stddef.h>, and HsFFI.h needs <stdint.h> to get the int-type limits (perhaps these could be autoconf'd). Cheers, Simon