This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Is this meant to compile?


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]