On Thu, 27 May 2021, Fuad Tabba wrote:

> On Thu, May 27, 2021 at 12:44 PM Julia Lawall <julia.law...@inria.fr> wrote:
> >
> > > @@
> > > expression a, b;
> > > identifier vcpu;
> > > fresh identifier vcpu_ctxt = vcpu ## "_ctxt";
> > > iterator name kvm_for_each_vcpu;
> > > identifier fc;
> > > @@
> > > kvm_for_each_vcpu(a, vcpu, b)
> > >  {
> > > /* hop over any declarations */
> > > + vcpu_ctxt = &vcpu->arch.ctxt;
> > > <+...
> > > fc(..., vcpu, ...)
> > > ...+>
> > >  }
> > >
> > > So I'm trying to add the line "vcpu_ctxt = &vcpu->arch.ctxt" after any
> > > declarations, only if there's a function in that block that's using
> > > vcpu. This works, but the vcpu_ctxt assignment is of course always
> > > added first, before any declarations.
> > >
> > > Doing the following partially works, but it of course misses the case
> > > where the function call with vcpu comes immediately after the
> > > vcpu_ctxt assignment. Removing S2 altogether gives me a parse error.
> > >
> > > @@
> > > expression a, b;
> > > identifier vcpu;
> > > fresh identifier vcpu_ctxt = vcpu ## "_ctxt";
> > > iterator name kvm_for_each_vcpu;
> > > identifier fc;
> > > statement S1, S2;
> > > @@
> > > kvm_for_each_vcpu(a, vcpu, b)
> > >  {
> > >  ... when != S1
> > > + vcpu_ctxt = &vcpu->arch.ctxt;
> > >  S2;
> > > <+...
> > > fc(..., vcpu, ...)
> > > ...+>
> > >  }
> >
> > @@
> > identifier f;
> > statement S1,S2;
> > @@
> >
> > f(...) {
> > ... when != S1
> > (
> > + new_code
> > S2
> > ... when any
> > &
> > <+...
> > fc(..., vcpu, ...)
> > ...+>
> > )
> > }
>
> I get a parse error when I try that (both copying it verbatim, or
> adapting it to my code):
>
> minus: parse error:
>   File "test.cocci", line 18, column 0, charpos = 209
>   around = '<+...',
>   whole content = <+...

OK, perhaps that is a corner that is not supported.  It might work bettwe
with

... when any
    when exists
fc(..., vcpu, ...)
... when any

in place of the <+... ...+>

But since you have a satisfactory solution, that is fine too.

julia
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

Reply via email to