[RFC] PR61300 K&R incoming args
Joseph S. Myers
joseph@codesourcery.com
Mon Jun 2 21:30:00 GMT 2014
On Mon, 2 Jun 2014, Florian Weimer wrote:
> On 05/31/2014 08:56 AM, Alan Modra wrote:
>
> > > It's fine to change ABI when compiling an old-style function
> > > definition for which a prototype exists (relative to the
> > > non-prototype case). It happens on i386, too.
> >
> > That might be so, but when compiling the function body you must assume
> > the worst case, whatever that might be, at the call site. For K&R
> > code, our error was to assume the call was unprototyped (which
> > paradoxically is the best case) when compiling the function body.
>
> Is this really a supported use case? I think I remember tracking down a bug
> which was related to a lack of float -> double promotion because the call was
> prototyped, and the old-style function definition wasn't. This would have
> been on, ugh, SPARC. I think this happened only in certain cases (float
> arguments, probably).
ISO C (right back to C90) requires a prototype in scope if a variadic
function, or a function whose definition has prototyped argument types
changed by the default argument promotions (such as float and short), is
called.
It probably makes sense by now to enable -Wimplicit-function-declaration
by default, though that won't catch cases where the file with the
unprototyped call has a non-prototype declaration such as "int foo();".
--
Joseph S. Myers
joseph@codesourcery.com
More information about the Gcc
mailing list