John sent me a bunch of output. I chose to look at util.c because its
relatively short. After deleting all the __inline__ warnings, there
were just two left:
ERROR CCN3277 ./util.c.c:23818 Syntax error: possible missing ';' or ','?
ERROR CCN3277 ./util.c.c:23819 Syntax error: possible missing ';' or ','?
The util.c.c file is what is generated by the preprocessor. The
shortest of the errors is line 23819:
*(*dest)++ = ((PL_e2a[(U8)(byte)] & ((U8)0x1f)) | 0xA0)
PL_utf2e[(U8)((PL_e2a[(U8)(byte)] & ((U8)0x1f)) | 0xA0)];
And yes there is a syntax error there. If you look at the balanced
parens, you will note that the first set ends in the middle of the line,
and then there is a space and then a PL_utf2e[...]; The latter is a
complete subexpression going to the end of the line.
So there are two expressions separated by a blank, indeed a syntax
error. If you look carefully, that first expression is repeated as a
component of the 2nd. It turns out that the correct expansion of the
macro is just the 2nd expression. The 1st expression should not be
there. The preprocessor is apparently outputting the results of an
intermediate stage of its processing!
I wonder if some developer left in a debug statement in the
preprocessor. But surely it gets enough use that this would have been
exposed long before now. So I don't know how to proceed. (Note that
this bug would cause huge long expansions when shorter ones would be
correct; if fixed, exceeding the apparent 2048 character limit might
just go away.)
I'm sending this to the whole list in case it rings a bell for someone.