FYI: clang static analyzer page has moved to http://scan.freebsd.your.org/freebsd-head/

Jilles Tjoelker jilles at stack.nl
Wed Jan 5 19:36:55 UTC 2011


On Wed, Jan 05, 2011 at 05:55:45PM +0100, Ulrich Spörlein wrote:
> On Wed, 05.01.2011 at 09:34:49 -0500, John Baldwin wrote:
> > These are all marked as __dead2, so the compiler should "know" that these do
> > not return.

> And clang did the right thing here in the past. Beware that it does no
> inter-procedural analysis yet, so it will usually miss that usage()
> calls exit unconditionally.

> *But*, it should grok that for err(3) and exit(3). Now there are some
> possible remedies:

> - get IPA to work with clang, or at least file a bug

> - mark functions as __dead2 (please don't do that)

Why not?

I have done this in some cases because it leads to better code with gcc
(the system version in 9-current). See SVN commit r212508 to
bin/sh/parser.c. Although synexpect() and synerror() are static, adding
__dead2 to both makes the executable 576 bytes smaller on i386 (these
functions are called many times).  Adding __dead2 to synexpect() only
causes a warning "noreturn function does return" (it calls synerror()).
Adding __dead2 to synerror() only also makes the executable smaller but
not as much as adding it to both.

Reordering the functions in the file does not help to make gcc see that
the functions do not return.

> - come up with a way to mark the false positives (kinda impossible with
>   the way scan-build currently works)

-- 
Jilles Tjoelker


More information about the freebsd-current mailing list