Re: [RFC PATCH 0/2] check for identical exprs on LHS and RHS of '&&'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Aug 10, 2011 at 09:07:13PM +1200, Chris Forbes wrote:
> Hi, I've started working on a new check for sparse to pick up a common 
> error -- identical expressions appearing on both sides of some binary
> operators.
> 
> This initially supports '&&', and incompletely -- but the plan is to
> check instances of '!=', '==' and '||' the same way.
> 
> The check relies on recursively walking the ->left and ->right expressions, 
> looking for differences. The implementation is a little verbose, but can 
> be shared between all the operators.
> 
> What I'd like to know is:
> 
> * Do people consider this a worthwhile check to make?

I'd definitely love to see this check.  I saw an example of the kinds of
bugs it can find in a recent article
(http://software.intel.com/en-us/blogs/2011/08/08/pvs-studio-vs-clang/),
and immediately wished Sparse and/or GCC would include that check.

> * Am I "doing it right" with the expression walking?

Seems OK at first glance, with one exception: you need to handle
expressions with side-effects specially, since you could legitimately
write something like (x == func() && x == func()), or (x == *p++ && x ==
*p++).

> * Are there other cases which people would be interested in?

How about checking for the same expression multiple times in a single
block of | or & expressions?  (flag1 | flag2 | flag2) seems like a
likely copy/paste error.

- Josh Triplett
--
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Newbies FAQ]     [LKML]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Trinity Fuzzer Tool]

  Powered by Linux