lkml.org 
[lkml]   [2011]   [Dec]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [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)
    >
    >


    \
     
     \ /
      Last update: 2011-12-21 13:13    [W:0.025 / U:29.388 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site