| Bill Allombert on Wed, 16 Sep 2009 12:46:42 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: Static analyzer run |
On Wed, Sep 16, 2009 at 06:00:49AM +0200, Lorenz Minder wrote:
> Hi,
>
> > Can you tell the analyzer that pari_err does not return ?
> > This is a large source of false positive with gcc.
>
> Hmm, isn't it gcc-clean at the moment? In any case, maybe we should
It is, but only due to the addition of lot of useless return NULL;
> declare pari_err() with __attribute__((noreturn)). That would
> presumably help both gcc and clang (whose analyzer I used to find these
> problems).
>
> I've had no time yet to look into how to make such a change in
> a portable manner.
Yes... Karim objection that this would non-gcc compilers to output contractory
warning from gcc compilers, and we could not shut them both down:
An example:
GEN foo()
{
...
pari_err(talker,"...");
return NULL;
}
With __attribute__((noreturn)):
Warning statement not reached:
return NULL;
Without __attribute__((noreturn)) and without "return NULL"
Warning: function foo does not return.
> Ok, thanks for those assessments. I hope I'll get around looking at
> some of the ones that probably aren't false at some point. (Most of
> them are in code I don't understand and therefore won't touch, though.)
Unfortunately I am sometimes in the same situation as you see...
> BTW, I accidentally stumbled over a problem in the SEA module today.
> Can you check the attached patch?
Commited in revision 11921. I find very unfortunate that gerepileall
take an explicit argument number. I was hopping for some preprocessing
trickery to avoid that, but I found none. We should probably change it
to a NULL-terminated list instead, though this would cause other problems
with argument accidentally equal to NULL.
Cheers,
Bill.