On 09/09/2015 05:51 AM, Paolo Bonzini wrote: > > > On 08/09/2015 20:35, Markus Armbruster wrote: >>>> Having not used Coccinelle yet, what happens if any of these functions >>>> become desynchronized ? >> Coccinelle transforms C to C. Problem: if you parse C the normal way >> (first run preprocessor, then the parser proper), you have to unparse >> and unpreprocess at the end to get a useful result. Unparsing is easy, >> but unpreprocessing is hard. >> >> Instead, Coccinelle tries to parse *unpreprocessed* C. Works most of >> the time, because most uses of function-like macros can be treated as if >> they were function calls, and most uses of object-like macros can be >> treated as if they were values. >> >> When it doesn't work, Coccinelle needs to resort to magic and / or skip >> over some code it can't decipher. The latter is undesirable, because if >> the skipped code contains something we'd like to transform, we won't. >> >> Part of the magic is treating "bad" macros specially. --macro-file >> helps with that part: macros defined there are "bad". Sorry, I can't >> really explain it, -EMAGIC. /usr/share/coccinelle/standard.h is used by >> default. >> >> So what happens when the this file gets out of sync? Worst case is >> Coccinelle misses a pattern it could find if it was in sync. >> >> Provided the macro file makes sense initially, a moderately bit-rotten >> version is still almost certainly better than nothing. > > Great answer. I'll only add that exactly the same issue happens with > the Coverity model. > > Paolo >
Great, thanks for the info :) --js