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
>
>