Re: [Cocci] [PATCH 2/2] coccinelle: Add patch for replacing open-codedIS_ERR_OR_NULL

From: Julia Lawall
Date: Wed Dec 21 2011 - 07:10:35 EST


On Wed, 21 Dec 2011, Lars-Peter Clausen wrote:

On 12/20/2011 11:24 PM, Julia Lawall wrote:
For this one, I made quite a number of changes, some of which required
fixing a bug in Coccinelle... I will try to release the bug fix
shortly. In general, though, I have added ... between the two tests. I
also got rid of the focus on ifs in the org and report rules.


Ok, thanks. Was the removing of the ifs in related to the Coccinelle bug? I
always get an error if I start a match with a conditional.

Not at all. The bug was that a patterm like:

@depends on patch@
expression x;
@@
- IS_ERR(x)
+ IS_ERR_OR_NULL(x)
|| ...
- || x == NULL

thought that it should be applied in two ways, giving an error about a double transformation of the IS_ERR call.

Could you reproduce the example that caused problems?

thanks,
julia

julia

virtual context
virtual patch
virtual org
virtual report

// Since the logical or operator by itself is not commutative we need
rules for
// both cases as well as for their De Morgan equivalents.

@depends on context@
expression x;
@@
* IS_ERR(x)
|| ... ||
* x == NULL

@depends on context@
expression x;
@@
* x == NULL
|| ... ||
* IS_ERR(x)

@depends on context@
expression x;
@@
* !IS_ERR(x)
&& ... &&
* x != NULL

@depends on context@
expression x;
@@
* x != NULL
&& ... &&
* !IS_ERR(x)

@depends on patch@
expression x;
@@
- IS_ERR(x)
+ IS_ERR_OR_NULL(x)
|| ...
- || x == NULL

@depends on patch@
expression x;
@@
- x == NULL
+ IS_ERR_OR_NULL(x)
|| ...
- || IS_ERR(x)

@depends on patch@
expression x;
@@
- !IS_ERR(x)
+ !IS_ERR_OR_NULL(x)
&& ...
- && x != NULL

@depends on patch@
expression x;
@@
- x != NULL
+ !IS_ERR_OR_NULL(x)
&& ...
- && !IS_ERR(x)

@r depends on org || report@
expression x;
position p;
@@
(
IS_ERR@p(x) || ... || x == NULL
|
x == NULL || ... || IS_ERR@p(x)
|
!IS_ERR@p(x) && ... && x != NULL
|
x != NULL && ... && !IS_ERR@p(x)
)

@script:python depends on org@
p << r.p;
x << r.x;
@@

msg="IS_ERR_OR_NULL can be used with %s" % (x)
msg_safe=msg.replace("[","@(").replace("]",")")
coccilib.org.print_todo(p[0], msg_safe)

@script:python depends on report@
p << r.p;
x << r.x;
@@

msg="IS_ERR_OR_NULL can be used with %s" % (x)
coccilib.report.print_report(p[0], msg)


--
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/