On Wed, 22 May 2019, Christoph Böhmwalder wrote:

> Hi,
>
> Consider the following snippet of C:
>
>
> #define f() ({ puts("hello"); 0; })
> int main()
> {
>     printf("%d\n", f());
> }
>
>
> It uses an expression statement in the definition of `f`, which is a gcc
> extension.
>
> Now let's try to write a semantic patch to generate something like this:
>
>
> @@
> @@
> - cocci_replace_this()
> + ({ puts("hello"); 0; })
>
>
> With the C code as:
>
>
> #define f() cocci_replace_this()
> int main()
> {
>     printf("%d\n", f());
> }
>
>
> This prompts the following error message from spatch:
>
>
> $ spatch --sp-file test.cocci test.c
> init_defs_builtins: /usr/lib/coccinelle/standard.h
> 32 33
> Fatal error: exception Failure("plus: parse error: \n = File \"test.cocci\",
> line 4, column 3,  charpos = 32\n    around = '{', whole content = + ({
> puts(\"hello\"); 0; })\n")
>
>
> Now here's my question: this obviously implies that coccinelle doesn't support
> expression statements (or any other non-standard C for that matter).

The C parser should parse such statements.  I think it is indeed likely
that the semantic patch parser doesn't support them.  I wouldn't go as far
as saying that the semantic patch parser doesn't support any non-standard
C.  It pretty much supports what people have asked for, when there didn't
seem to be a workaround.

> Can I
> still somehow tell spatch to just replace it with this string of text instead
> of trying to parse it as C?

Is it always exactly this string that you want to add?

julia
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci

Reply via email to