Generating Function Prototypes
Simon Marlow
simonmar at microsoft.com
Mon Jul 8 07:22:21 EDT 2002
> >Sure, it's a problem, a bug in GHC, whatever. But I don't see a way
> >around it! We can't just generate prototypes because they might
> >conflict with prototypes already in scope.
>
> I see the problem now.
>
> This seems to compile (with a warning):
>
> typedef long long HsInt64;
>
> int foo (int); // annoying decl we want to ignore
>
> // foo :: Int64 -> IO Int64
> inline HsInt64 call_foo (HsInt64 x)
> {
> static HsInt64 foo(HsInt64);
> return foo(x);
> };
>
> I haven't actually tested it, but it may be a solution.
Strange; gcc doesn't generate an error for the local prototype for
foo(), although it does if you remove the 'static'. My copy of the C99
standard has this to say:
[#7] If, within a translation unit, the same identifier
appears with both internal and external linkage, the
behavior is undefined.
and
20)A function declaration can contain the storage-class
specifier static only if it is at file scope; see 6.7.1.
which I think means that you shouldn't do this. GCC seems to be not
complying with C99 here.
Cheers,
Simon
More information about the FFI
mailing list