Is this meant to compile?

Zack Weinberg zack@codesourcery.com
Wed Aug 20 19:57:00 GMT 2003


Chris Lattner <sabre@nondot.org> writes:

> This testcase:
>
> -------------------------
> static int foo(int);
> static int foo(C)
> char C;
> { return C; }
>
> void test() { foo(7); }
> ------------------
>
> Currently compiles with mainline gcc, yet this testcase:
>
> ------------------
>
> static int foo(int);
>
> static int foo(char C) { return C; }
> void test() { foo(7); }
>
>
> ------------------
>
> Produces these errors:
> 2003-08-20-PrototypeMismatch.c:7: error: conflicting types for 'foo'
> 2003-08-20-PrototypeMismatch.c:3: error: previous declaration of 'foo'
>
> Is this desired behavior?

Yes.  In old-style function definitions, any argument narrower than an
'int' gets promoted to 'int'.  (This is not the same as the widening
required by some ABIs for such arguments, which is transparent to the
language.)

zw



More information about the Gcc mailing list