This is not working with my 1.0.0-rc21 on ubuntu, is there a version you'd
recommend?

Many thanks!

ron

On Thu, Apr 2, 2015 at 2:22 PM Julia Lawall <[email protected]> wrote:

> > f(...){
> > + Mach *m = machp();
> > ...
> > x = m
> > ...
> > }
>
> This requires there to be exactly one occurrence of x = m on every (non
> failing) execution path.
>
> >
> > The x = m could also be m->x, or if (m) s, and so on
>
> Do you just mean any reference to m at all?  Or do you mean any reference
> that is not an assignment to m, ie not m = x.
>
> If you want to allow any kind of reference to m, you could do:
>
> @r exists@
> typedef Mach; // only needed once per semantic patch
> idexpression Mach *m;
> function f;
> position p;
> @@
> f@p(...){
> <+...
> m
> ...+>
> }
>
> @@
> identifier r.f;
> position r.p;
> idexpression Mach *r.m;
> @@
>
> f@p(...) {
> ++Mach *m;
> ...
> }
>
> There could be more than one Mach * typed variable in a function.  The ++
> lets them all get added, but there is no way to know in what order they
> will appear.
>
> Otherwise, the idea here is that if there ever exists an m in the
> function, then add the declaration to the function.  It might be possible
> to merge the two rules, as:
>
> @r exists@
> typedef Mach; // only needed once per semantic patch
> idexpression Mach *m;
> function f;
> @@
> f(...){
> ++ Mach *m;
> <+...
> m
> ...+>
> }
>
> But that might give multiple declarations of the same variable, if it is
> used in more than one execution path.
>
> Also, it might be possible to say global idexpression Mach *m.  I don't
> remember if that is in the current release or in the upcoming one.
>
> julia
>
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci

Reply via email to