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