https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91973
Bug ID: 91973 Summary: gcc failed for Multiple level macro expansion Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: qinzhao at gcc dot gnu.org Target Milestone: --- GCC cannot compile the following small testing case: [qinzhao@localhost]$ cat t1.c extern void boo (void *addr); #define foo(addr) \ boo (addr) #define bar(instr, addr) \ (instr) (addr) void check (void *addr) { bar(foo, addr); } [qinzhao@localhost]$ sh t /home/qinzhao/Install/latest/bin/gcc -O -S t1.c t1.c: In function ‘check’: t1.c:11:7: error: ‘foo’ undeclared (first use in this function); did you mean ‘boo’? 11 | bar(foo, addr); | ^~~ t1.c:7:4: note: in definition of macro ‘bar’ 7 | (instr) (addr) | ^~~~~ t1.c:11:7: note: each undeclared identifier is reported only once for each function it appears in 11 | bar(foo, addr); | ^~~ t1.c:7:4: note: in definition of macro ‘bar’ 7 | (instr) (addr) | ^~~~~ However, if I delete the parantheses from the macro bar as following: #define bar(instr, addr) \ instr (addr) The compilation succeed. also icc can successfully compile the original small testing case.