On Tue, 11 Jun 2019, Timur Tabi wrote:
> On Fri, May 24, 2019 at 2:38 PM Julia Lawall <[email protected]> wrote:
> > On Fri, 24 May 2019, Timur Tabi wrote:
> > > I figured it out:
> > >
> > > @@
> > > identifier func;
> > > fresh identifier label = func ## "_exit";
> >
> > Yes, that works too. Simpler than my suggestion.
>
> I managed to break it somehow. I suspect I ran into some other quirk
> of coccinelle. I'm trying to convert that looks like this:
>
> x = MACRO1(stuff);
> if (x == NULL)
> {
> BREAKPOINT();
> status = ERROR;
> goto myfunc_exit;
> }
>
> into:
> x = MACRO1(stuff);
> CHECK_OR_BP_AND_GOTO(x == NULL, status, ERROR, _exit);
>
> I thought this would work:
>
> @@
> type T;
> expression y, z;
> identifier x, s;
> identifier func;
> fresh identifier label = func ## "_exit";
> @@
> func(...) {
> <+...
> x =
> (T)
> \(MACRO1\|MACRO2\)
> (...);
> -if (y)
> -{
> - BREAKPOINT();
> - s = z;
> - goto label;
> -}
> +CHECK_OR_BP_AND_GOTO(y, s, z, _exit);
> ...
> label:
> ...+>
> }
>
> but I get this error:
>
> 18: unexpected use of a fresh identifier label
>
> What am I missing?
Fresh identifiers are only for + code.
You need to construct the identifier you want to match using python code,
as illustrated in demos/pythontococci.cocci
julia
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci