On Sun, 14 Apr 2019, Markus Elfring wrote: > > Use position variables and use a second rule that forces the positions to > > be different. I already explained this. > > I suggest to take another look at the provided information. > > I have extended the analysis approach like the following. > > > @find@ > identifier work; > position p1, p2; > statement s1, s2; > type T; > @@ > T work(...) > { > ... when any > if@p1 (...) > { > ... when any > s1 > s2 > } > ... when any > if@p2 (...) > { > ... when any > s1 > s2 > } > ... when any > } > > @duplicated_code@ > identifier work; > position pos != find.p2, find.p1, find.p2; > statement s1, s2; > type T; > @@ > T work(...) > { > ... when any > *if@p1@pos (...) > *{ > ... when any > * s1 > * s2 > *} > ... when any > *if@p2 (...) > *{ > ... when any > * s1 > * s2 > *} > ... when any > } > > > > You surely don't like it, but nothing is going to change in this direction, > > so the discussion (at least on my side) ends here. > > Now I stumble on another error message. > > > elfring@Sonne:~/Projekte/Coccinelle/janitor> spatch --parse-cocci show_same_statements7.cocci > … > Variable find.p2 in duplicated_code cannot be used as both a position and a constraint I think that you have to declare find.p1 and find.p2 on a subsequent line. julia > > > > By the way: > Will it matter that the determined source code positions are not only different > but also that one place should be before the other? > > Regards, > Markus >