On Thu, 12 Jan 2017, Guenter Roeck wrote:

> Hi Julia,
>
> I have a couple of new problems with coccinelle.
>
> First, please have a look at the attached testc.c and test.cocci.
> Running test.cocci on testc.c results in a hang. The problems seems
> to be related to the number of (to-be-folded) labels.

Here is a more efficient version.  I put an exists in the first rule - you
just care if there exists a path to the double label, but don't care if
all paths lead to the double label.  In the second rule, I changed <+...
...+> to <... ...>, because there is no need to check if there is at least
one match.  You just want to perform the change if the opportunity arises.

julia

virtual patch

@unneeded_label exists@
identifier fn;
position p1;
identifier l1,l2;
@@

fn(...) {
<+...
l1:@p1
l2:
...+> }

@fold_label@
identifier unneeded_label.fn;
identifier l,l1,l2;
position p != unneeded_label.p1;
position any p1;
statement S;
@@

fn(...) {
<...
- goto l1;
+ goto l2;
  ...
-l1:
 <... when != S
 l:@p1
 ...>
 l2:@p
...> }

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

Reply via email to