On Tue, 16 Apr 2013 15:44:36 +0200, Dimitry Andric <d...@freebsd.org> wrote: > On 2013-04-16 13:28, Bruce Evans wrote: >> Extending the example a little gives the answer to my question: >> >> @ #include <stdbool.h> >> @ >> @ typedef void vb(bool first); >> @ >> @ vb foo; >> @ void bar(vb *p); >> @ >> @ void >> @ foo(first) >> @ bool first; >> @ { >> @ bar(foo); >> @ } >> >> @ z.c:10:7: warning: promoted type 'int' of K&R function parameter is >> not compatible with the parameter type 'bool' declared in a previous >> prototype [-Wknr-promoted-parameter] >> @ bool first; >> @ ^ >> @ z.c:5:4: note: previous declaration is here >> @ vb foo; >> @ ^ >> @ z.c:12:6: warning: incompatible pointer types passing 'void ()' to >> parameter of type 'vb *' (aka 'void (*)(bool)') >> [-Wincompatible-pointer-types] >> @ bar(foo); >> @ ^~~ >> @ z.c:6:14: note: passing argument to parameter 'p' here >> @ void bar(vb *p); >> @ ^ >> @ 2 warnings generated. >> >> Apparently clang ignores the mismatched prototype after printing a warning >> about it, and also throws away the type info that it learns by compiling >> the K&R function, so it is left with only 'void ()' for the type. > > Yes, this is basically what happens. The actual definition of the > function overrides the prototype, if it comes before the invocation. > > For example, in the original problem case, the warning could also be > worked around by moving the getsasldata() definition to below > attemptauth(), where it is invoked. This still counts as cheating, > though. :-)
And that's precisely why other functions, like esmtp_check() do not have the same problem, even though they have exactly the same signature and they are used in the same way! _______________________________________________ svn-src-head@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"