[Cocci] Problem when using a macro for mangling function names
padator at wanadoo.fr
Fri Mar 20 00:20:32 CET 2009
Julia Lawall <julia at diku.dk> writes:
> It does seem to be a bug, derived from incorrect parsing of the C code.
> Unfortunately, Yoann, who knows most about the parser, is probably not
> able to look into it right now.
Apparently this is because in C, the following code is syntaxically correct:
void a(int)(int x);
but not semantically correct. gcc even returns this semantic error message:
xxx.c:1: error: 'a' declared as function returning a function
Our C parser didn't do this verification, and seeing your
void METH(foo)(int x)
our parser wrongly infered that 'foo' was a typedef and constructs
an invalid AST that get later our unparser confused.
I fixed the parser to return the same error that gcc, and print
a message to give a hint about how to fix the problem
(what Julia suggested below).
Thanks for the bug report. The new version of coccinelle that
we will soon release will contain this bugfix.
> Do you have a lot of macros like this? If this is the only one, you can
> add the following to your standard.h file:
> #define METH(x) x
> Note that the standard.h file that you use is in /usr/local/share. On the
> other hand, since you are not working on Linux code, the definitions in
> that file are perhaps not of much interest to you. You can thus also put
> this #define in a local file and include it using the -macro_file option
> to spatch, at least for initial testing.
> Cocci mailing list
> Cocci at diku.dk
> (Web access from inside DIKUs LAN only)
More information about the Cocci