Messages in this thread | | | Date | Wed, 21 Dec 2011 13:10:32 +0100 (CET) | From | Julia Lawall <> | Subject | Re: [Cocci] [PATCH 2/2] coccinelle: Add patch for replacing open-coded IS_ERR_OR_NULL |
| |
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) > >
| |