On Mon, 30 Jul 2012, Lars-Peter Clausen wrote:
> Hi,
>
> I wanted to write a small cocci patch to transform
> static const char *str = "...";
> into
> static const char * const str = "...";
>
> I used the following semantic patch:
>
> @@
> identifier str;
> expression E;
> @@
> -static const char *str
> +static const char * const str
> = E;
>
> But coccinelle reports an error when running it:
>
> Fatal error: exception Failure("plus: parse error:
> = File "const_char_const.cocci", line 6, column 21, charpos = 77
> around = 'const', whole content = +static const char * const s
> ")
>
>
> So I did some more experimentation and it looks as if coccinelle does not
> like type qualifiers anywhere else except before the type. E.g. in C "const
> T" and "T const" are both legal C and have the same meaning. But coccinelle
> only accepts the first variant. Coccinelle's C parser though seems to be
> aware of it, since
>
> @@
> identifier p;
> @@
> *const void *p;
>
> matches both 'const void *foo;' and 'void const *bar;'. Also 'const void *
> const batz;' is matched. What does not match is 'volatile const void *foo;'
> although I would expect it to match unless 'disable optional_qualifier' is
> given for the rule.
>
> Also specifying multiple qualifiers does not seem work.
> E.g. "const volatile void *p" or even "const const void *p"
>
>
> I'm using 1.0.0-rc14.
Indeed, the C parser is more sophisticated in this respect. Thanks for
the report. I will look into it.
julia
_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)