pcpp
pcpp copied to clipboard
Deferred expansion doesn't work correctly
Source code
#define empty()
#define a() b empty()()
#define b() c empty()()
#define c() d empty()()
#define d() e empty()()
#define id(x) x
id(a())
Running cpp versus pcpp:
[tmp]$ cpp a.c
# 0 "a.c"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 0 "<command-line>" 2
# 1 "a.c"
# 9 "a.c"
c ()
[tmp]$ pcpp a.c
#line 9 "a.c"
e ()
Implication: in some very weird case pcpp causes an infinite loop, which is definitely incorrect:
#define empty()
#define a() b empty()()
#define b() a empty()()
a()
Related? https://github.com/ned14/pcpp/pull/101