pcpp icon indicating copy to clipboard operation
pcpp copied to clipboard

Deferred expansion doesn't work correctly

Open user202729 opened this issue 11 months ago • 2 comments

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 ()

user202729 avatar Jan 23 '25 10:01 user202729

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()

user202729 avatar Jan 23 '25 11:01 user202729

Related? https://github.com/ned14/pcpp/pull/101

ned14 avatar Jan 23 '25 21:01 ned14