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)


_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)

Reply via email to