RFC: C/C++ preprocessor macro support for GDB

Jim Blandy jimb@redhat.com
Mon Mar 18 19:52:00 GMT 2002


Neil Booth <neil@daikokuya.demon.co.uk> writes:
> I've looked over your patch a little more, and I don't think your macro
> expander works, because it doesn't mark individual tokens.  A "disabled
> macro" stack is *not* enough by itself to implement ISO C macro expansion
> semantics.  You need to attach information to individual tokens as well.
> I've not tried it, but I'd bet that
> 
> #define A(x) x A(A)(1)
> 
> expands to "1" with your code, whereas the correct expansion is "A(1)".
> Implementing this properly is a PITA, more so with a text-based expander
> like yours.  It would be very hard to get the same (correct) semantics as
> cpplib in corner cases with a text-based expander (2.95 has outstanding
> bugs in this area).

Just for the record:

    (gdb) show macro A
    Defined at /home/jimb/gdb/macros/play/test.c:12
    #define A(x) x
    (gdb) macro expand A(A)(1)
    expands to: A(1)
    (gdb) 

That's not to say that there aren't other subtle bugs in there.  :)
And that's also not to say that replacing my macroexp.c with libcpp
isn't the right thing to do.



More information about the Gcc mailing list