Re: [cocci] Can Coccinelle parse files where macros are used as binary operations?
Alice Lee <[email protected]> Mon, 16 Mar 2026 12:56:14 +0000
| Newsgroups | fr.inria.cocci |
|---|---|
| Message-ID | <[email protected]> |
Hi Julia, Is there an alternative to --defined that allows me to actually define a macro as in the "#define LS <<" example? If I modify the code to use a simpler switch than the equality check from the original as follows: #ifdef SYMB #define LS >> #define RS << #else #define LS << #define RS >> #endif I still get a parse error when I run "spatch --cocci-file rule_test.cocci --defined SYMB musl-1.2.5/src/string/memcpy.c --debug"'; is this actually best done by a preprocessor and out of scope for Coccinelle? Thanks, Alice ________________________________ From: Julia Lawall <[email protected]> Sent: Friday, March 13, 2026 3:12:34 PM To: Alice Lee Cc: [email protected] Subject: Re: [cocci] Can Coccinelle parse files where macros are used as binary operations? [EXTERNAL EMAIL - USE CAUTION when clicking links or attachments] On Thu, 12 Mar 2026, Alice Lee wrote: > > Hello, > > I am trying to use Coccinelle to search C codebases (I split up my questions > to make the threads more clear) and I am struggling to understand the scope > of the --macro-file argument. > > Can macros used with #if in the source code be defined in a file passed with > --macro-file, and then the right sections of source code are ignored? I was > unable to get a small example to work, so I assume that I can define the > macro but then there is no preprocessing to drop code. If I'm not > overlooking something, how would you recommend I parse a file > including these lines and then uses LS/RS as binary operators: > #if __BYTE_ORDER == __LITTLE_ENDIAN > #define LS >> > #define RS << > #else > #define LS << > #define RS >> > #endif > > I'm especially confused by this example because Coccinelle also cannot parse > a version in which I remove the code above and put one of the pairs of > defines in the macro definition file. I think you want the following command line options: --defined <symbol> treat cpp symbol as defined in #ifdef --undefined <symbol> treat cpp symbol as undefined in #ifdef --macro-file is for providing dummy definitions for macros used in the code that you are trying to parse. julia > > Thank you, > Alice Lee > >