chibicc
chibicc copied to clipboard
Newlines elided by preprocessor after empty macro
In a.c:
#define X typedef int unused; Y
#define Y
X
// comment
#include <stddef.h>
chibicc -c a.c:
a.c:5: #include <stddef.h>
^ variable name omitted
chibicc -E a.c:
typedef int unused; #include <stddef.h>
chibicc is eliminating the newlines and comments after the line X and concatenating the #include line onto the end of the macro expansion. It doesn't matter how many newlines or comments you add after X; the preprocessor swallows them all and never processes the #include. This has something to do with the empty Y at the end of #define X because it works fine without it.
The only workaround I've found is to put some other declaration (another unused typedef) between the X expansion and the #include. And I can't put this workaround under #ifdef __chibicc__ either because the #ifdef gets concatenated onto the macro expansion instead :)
For an empty expansion (*rest) points to the next token, this part end up clobbering its at_bol status https://github.com/rui314/chibicc/blob/90d1f7f199cc55b13c7fdb5839d1409806633fdb/preprocess.c#L651-L653