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 TjoelkerReceived on Wed Jan 05 2011 - 18:36:55 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:10 UTC