On Tue, 12 Jan 2021, Denis Efremov wrote:

>
>
> On 1/12/21 7:13 PM, Julia Lawall wrote:
> >
> >
> > On Tue, 12 Jan 2021, Denis Efremov wrote:
> >
> >> Hi,
> >>
> >> Let's suppose I have this pattern:
> >> @fix exists@
> >> position p;
> >> @@
> >>
> >> binder_release_work(...)
> >> {
> >>    ...
> >>    switch (...) {
> >> *          case BINDER_WORK_NODE: ... break;@p
> >>    }
> >>    ...
> >
> > Add when any to the outer ...s
>
> Thanks, this helped.
>
> >
> >> }
> >>
> >> and I want to match binder_release_work() function in 
> >> drivers/android/binder.c
> >> file (linux kernel, master)
> >>
> >> Seems like the rule is not enough, it gives nothing:
> >> $ spatch --cocci-file binder.cocci drivers/android/binder.c
> >> init_defs_builtins: /usr/lib64/coccinelle/standard.h
> >> HANDLING: drivers/android/binder.c
> >>
> >> 1) What can I do to reliable check that there is a special case in a 
> >> switch?
> >> 2) Is it possible to check that there is no case handling with something 
> >> like:
> >>    switch (...) {
> >>            ... when != case BINDER_WORK_NODE: ... break;
> >>    }
> >
> > I don't know if that will work.  But you can do it with two rules.  In the
> > first rule, you could put a position variable on the switch, and then in
> > the second rule, you could make a position variable that is required to be
> > different than the first one, and that is also attached to a switch.
>
> Yes, I use this method currently.
>
> Also I faced the problem when I can't use ... in the beginning of enum, i.e.:
> struct binder_work {
>         ...
>         enum binder_work_type {
>                 ... // <== will not work

Probably the ... needs a comma.

julia

> *               BINDER_WORK_NODE,
>                 ...
>         } type;
>       ...
> }
>
> This works:
> struct binder_work {
>         ...
>         enum binder_work_type {
>               // BINDER_WORK_TRANSACTION = ..., // also will not work
>                 BINDER_WORK_TRANSACTION = 1,
>                 BINDER_WORK_TRANSACTION_COMPLETE,
>                 BINDER_WORK_RETURN_ERROR,
> *               BINDER_WORK_NODE,
>                 ...
>         } type;
>         ...
> }
>
> Thanks,
> Denis
>
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

Reply via email to