Re: [cocci] Can Coccinelle parse files where macros are used as binary operations?
Julia Lawall <[email protected]> Tue, 17 Mar 2026 12:31:48 +0100 (CET)
| Newsgroups | fr.inria.cocci |
|---|---|
| Message-ID | <[email protected]> |
On Mon, 16 Mar 2026, Alice Lee wrote: > > 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? Coccinelle seeing the macro definition doesn't force it to use the macro definition. Try putting the #defines you want in a file and then putting --macro-file-builtins file. Alternatively, are these definition actually in the file where you expect the expansion to happen? Normally, if there is a parse error, which a use of eg LS should trigger, it will start trying to expand macros. But I wonder if it only tries for the ones that look like functions? If these definitions are in a header file, you may want an argument like --all-includes or --recursive-includes. Or you can put --include file.h on the command line explicitly. Or if you don't want to type it all the time, you can put at the beginning of your .cocci file: #spatch --include file.h Or any other command line arguments you want. julia > > 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 > > > > > >