Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 29 Nov 2012 17:24:12 +0100
From:      Jilles Tjoelker <jilles@stack.nl>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, Eitan Adler <eadler@freebsd.org>
Subject:   Re: svn commit: r243665 - head/sbin/dump
Message-ID:  <20121129162412.GD29338@stack.nl>
In-Reply-To: <20121129120147.GE3013@kib.kiev.ua>
References:  <201211290516.qAT5GoT5098709@svn.freebsd.org> <20121129120147.GE3013@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Nov 29, 2012 at 02:01:47PM +0200, Konstantin Belousov wrote:
> On Thu, Nov 29, 2012 at 05:16:50AM +0000, Eitan Adler wrote:
> > Author: eadler
> > Date: Thu Nov 29 05:16:50 2012
> > New Revision: 243665
> > URL: http://svnweb.freebsd.org/changeset/base/243665

> > Log:
> >   Mark non-returning function as such

> >   PR:		bin/172978
> >   Approved by:	cperciva
> >   MFC after:	3 days

> > Modified:
> >   head/sbin/dump/dump.h

> > Modified: head/sbin/dump/dump.h
> > ==============================================================================
> > --- head/sbin/dump/dump.h	Thu Nov 29 03:48:39 2012	(r243664)
> > +++ head/sbin/dump/dump.h	Thu Nov 29 05:16:50 2012	(r243665)
> > @@ -121,7 +121,7 @@ void	trewind(void);
> >  void	writerec(char *dp, int isspcl);
> >  
> >  void	Exit(int status) __dead2;
> > -void	dumpabort(int signo);
> > +void	dumpabort(int signo) __dead2;
> >  void	dump_getfstab(void);
> >  
> >  char	*rawname(char *cp);

> What is the goal of this change ?

This has been discussed before in
http://lists.freebsd.org/pipermail/freebsd-current/2011-January/022179.html
and the rest of the thread. The result there seems that it is the least
bad thing to add __dead2 even on static functions that do not return to
reduce compiler/analyzer warnings and improve the generated code with
GCC 4.2.1 and GCC 4.5.

> It is arguably backward. There is absolutely no use to mark signal
> handler as __dead2, and all other uses do not benefit from the
> redundand declaration.

Although most of the uses of dumpabort() are in the same file as its
definition, GCC 4.2.1 is too dumb to detect its noreturn property
automatically.

Furthermore, some of the uses are in separate files. In particular,
__dead2 on dumpabort() is required to mark or detect quit() as noreturn.

> Also, being quite removed from the function definition, there is a
> chance that some future modification would make the attribute a lie.

Both GCC and Clang generate a warning by default if it appears possible
for a noreturn function to return, so as long as -Werror remains enabled
it should be safe enough.

-- 
Jilles Tjoelker



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20121129162412.GD29338>