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