Date: Fri, 10 Aug 2018 10:25:50 +1000 (EST) From: Bruce Evans <brde@optusnet.com.au> To: Mark Johnston <markj@freebsd.org> Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r337426 - head/sbin/ifconfig Message-ID: <20180810092251.K1276@besplex.bde.org> In-Reply-To: <201808071725.w77HPciT051597@repo.freebsd.org> References: <201808071725.w77HPciT051597@repo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 7 Aug 2018, Mark Johnston wrote: > Log: > ifconfig: Fix use of _Noreturn. > > The _Noreturn is a function-specifier (like inline) which must preceed > the declarator. > > Submitted by: Sebastian Huber <sebastian.huber@embedded-brains.de> > MFC after: 1 week _Noreturn is even more broken than I knew. It should never be used. Here its use is wronger than usual. > Modified: head/sbin/ifconfig/ifconfig.c > ============================================================================== > --- head/sbin/ifconfig/ifconfig.c Tue Aug 7 17:13:42 2018 (r337425) > +++ head/sbin/ifconfig/ifconfig.c Tue Aug 7 17:25:38 2018 (r337426) > @@ -109,7 +109,7 @@ static int ifconfig(int argc, char *const *argv, int i > static void status(const struct afswtch *afp, const struct sockaddr_dl *sdl, > struct ifaddrs *ifa); > static void tunnel_status(int s); > -static void usage(void) _Noreturn; > +static _Noreturn void usage(void); > > static struct afswtch *af_getbyname(const char *name); > static struct afswtch *af_getbyfamily(int af); FreeBSD code should use __dead2 since it is more portable (within FreeBSD) and doesn't have so mean syntactical restrictions. However, it only exists at all since it had similar syntactial restrictions when it was new (FreeBSD-1 used __dead, which must be placed like _Noreturn, but __dead2 uses __attribute__(()) which couldn't be placed there when it was new), and the macro that hides the details was renamed to inhibit misuse. Changing __dead2 to _Noreturn and moving it to satisfy the restricted syntax of the latter mainly broke support for old compilers where __dead2 cannot be placed there. However, all declarations of static usage() as non-returning are bogus, and this one is more bogus than most since another style bug is to unsort usage() to before where it is used, so even 1-pass compilers can see that it doesn't return before generating code that uses it. Unsorting of inline functions is sometimes needed so that 1-pass compilers can optimize them, but optimizing usage() is especially not needed. Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20180810092251.K1276>