On Tue, 22 Nov 2016, Michael Stefaniuc wrote:
> On 11/22/2016 02:33 PM, Julia Lawall wrote:
> >
> >
> > On Tue, 22 Nov 2016, Michael Stefaniuc wrote:
> >
> >> Hello,
> >>
> >> I have to have 3 rules to remove a cast. The rules are basically
> >> identical, they just differ by the type of an expression. That type is
> >> inherited from different rules that aren't matching at the same time.
> >>
> >> Now I wanted to use positions to eliminate false positives rather than
> >> duplicating that code, but that doesn't work. Using the position in the
> >> second rule will generate an error:
> >> meta: semantic error: position cannot be inherited over modifications: p
> >>
> >> Though that doesn't makes sense, as the position is never modified, only
> >> all the other positions not matching are modified.
> >> Here are the relevant chunks:
> >>
> >> @ disable drop_cast @
> >> type find.To;
> >> type T;
> >> To *obj;
> >> position p != cast_good.p;
> >> @@
> >> - (T)
> >> (obj@p)
> >>
> >>
> >> @ disable drop_cast @
> >> type find2.To;
> >> type T;
> >> To *obj;
> >> position p != cast_good.p;
> >> @@
> >> - (T)
> >> (obj@p)
> >
> > What gets modified is the file, or at least the function, so you can't
> > rely on the positions being meaningful once the code has been changed.
> Ok, I have seen the positions just as an anchor and as that respective
> code is never modified the position shouldn't change.
>
> > I think you could use a disjunction to make just one rule, to avoid the
> > problem.
> Yeah, but I have to add the disjunction to all 3 functions. That's what
> I did initially but that doesn't feels right. But if that's the only
> workable solution I'll go back to that.
>
> > You can also put a set of possible types for obj ({type1, type2, ...}) and
> > put the whole thing into one line.
> That doesn't work, I have tried it before:
>
> @@
> {r1.T, r2.T} obj;
> @@
>
> That only matches when both r1.T and r2.T are defined. That kinda feels
> odd but probably is easier to implement as all inherited variables need
> to be bound. I have quiet a few duplicated rules across multiple scripts
> due to that.
OK. It should not require that all of the variables are bound, but it is
possible that it does...
julia
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci