FYI: clang static analyzer page has moved to

Jilles Tjoelker jilles at
Sun Jan 9 00:13:55 UTC 2011

On Wed, Jan 05, 2011 at 10:30:43PM +0100, Ulrich Spörlein wrote:
> On Wed, 05.01.2011 at 20:36:53 +0100, Jilles Tjoelker wrote:
> > On Wed, Jan 05, 2011 at 05:55:45PM +0100, Ulrich Spörlein wrote:
> > > *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?

> Cause IMHO it adds clutter, is noisy and needs to be maintained
> manually, when we have these "computer" things that should deduct this
> by themselves.

Yes, but to me it seems the only realistic option of your three.
Upstream is unlikely to add IPA to the checker and other kinds of
annotation are probably either similar to __dead2 with the same problems
and an additional one that gcc does not check it or very specific to a
particular complaint from the checker.

> > 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.

> This is too bad and really makes me sad. It shouldn't be necessary to
> hand-hold the compilers like that. Could you try some tests with gcc 4.5
> to confirm this is still required?

gcc 4.5 still needs it. gcc 4.6 and clang (the compiler) do not need it.
(For gcc, used ports gcc and compiled head bin/sh with some patches on
stable/8. For clang, used base clang and compiled head bin/sh on head.)

Jilles Tjoelker

More information about the freebsd-current mailing list