Hi,

libcpp/cpplib.h defines:

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

now, consider the following simple code:

1: #define FOO foo1
2: 
3: int main()
4: {
5:    FOO(1);
6:    foo1(2);
7:    FOO(3);
8: }

The used_define callback is called at line 5, but not at line 7.
So it seems there's an inconsistency.

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

Assuming the former (as per the comments), there's apparently a bug at line 5
where the callback should not trigger, or the comment should be updated to
reflect the implementation (e.g. callback triggered on first expansion if the
macro hasn't be previousely tested).

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

Arno

Reply via email to