>>>>> "Arnaud" == Arnaud Charlet <char...@adacore.com> writes:

Arnaud>   /* Callbacks for when a macro is expanded, or tested (whether
Arnaud>      defined or not at the time) in #ifdef, #ifndef or "defined".  */
Arnaud>   void (*used_define) (cpp_reader *, unsigned int, cpp_hashnode *);

Arnaud> Is the intent that used_define should only be called when used
Arnaud> in an #ifdef as explained by the documented, or also when
Arnaud> expanded in the source code?

I don't know the intent aside from what is in the comment.

However, it looks like this is used to implement -dU:

    `U'
          Like `D' except that only macros that are expanded, or whose
          definedness is tested in preprocessor directives, are output;
          the output is delayed until the use or test of the macro; and
          `#undef' directives are also output for macros tested but
          undefined at the time.

I suppose the idea is to emit each used macro a single time only, the
code seems to confirm this.

Arnaud> If the above is correct, what I'm interested in is a callback
Arnaud> that will be called each time a macro is expanded or tested
Arnaud> *anywhere* in the source code (for the purpose of generating
Arnaud> cross-reference info for macros), so would the addition of a new
Arnaud> callback (e.g.
Arnaud>   void (*used) (cpp_reader *, unsigned int, cpp_hashnode *);
Arnaud> ) be acceptable in principle? If so, I'll post a formal patch on
Arnaud> gcc-patches@

Yes, this would be fine.

Tom

Reply via email to