Re: [PATCH] coccinelle: if(ret)return ret; return ret; semanticpatch

From: Julia Lawall
Date: Tue Jun 07 2011 - 12:56:42 EST


On Tue, 7 Jun 2011, Greg Dietsche wrote:

> Hi Julia,
>
> On 06/05/2011 11:55 PM, Julia Lawall wrote:
> > Thanks. I tried this too, but I wasn't sure about the results. The
> > question is why stop here.
> very interesting! Honestly I hadn't thought much further than what you see in
> my semantic patch. I'd noticed piece of code in the iwlegacy driver and
> wondered what'd happen if I taught myself a little bit about cocci :)
> > For example, there are IS_ERR calls that one
> > could consider as well. Or ret< 0. Or why not just:
> >
> > @@
> > expression ret;
> > @@
> >
> > - if (...) return ret;
> > return ret;
> >
> > Although there might be function calls that one doesn't want to touch, so:
> >
> > @@
> > identifier f != IS_ERR;
> > expression ret;
> > statement S;
> > @@
> >
> > (
> > if (<+...f(...)...+>) S
> > |
> > - if (...) return ret;
> > return ret;
> > )
> >
> > julia
> >
> >
> >
> There seem to be many variations on the theme to consider... though hopefully
> the compiler optimizes most of these out... For example, in
> sound/soc/codecs/wm8940.c, Jonathan Cameron pointed some code out to me that
> looks like this:
>
> if (ret)
> goto error_ret;
>
> error_ret:
> return ret;

Good one :)

> As an aside, I added a feature to the script for myself so that I can for
> example write 'make coccicheck M=drivers/net/wireless/' for example to focus
> in on that directory and just run the checks there... I can submit a patch for
> this... though I was wondering if there is already a way to do this and I just
> missed it. The thought was to make it work the same way you'd build a module.

I think it is possible, but Nicolas would know better.

julia
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/