Compiling the following simple snippet: void foo(void) { int i = 0x4E+0x23; } triggers the error message indicated in the summary. Analysis of the problem shows that the macro VALID_SIGN() used inside lex_number() (libcpp/lex.c) misidentifiex the plus sign following the E (possible exponent) character as still being part of the number, even though this is impossible since the number started with 0x, so the exponent is required to be introduced with `p' or `P'. IMHO, the number parser needs to detect the possible 0x prefix early, and pass this information down to VALID_SIGN() so this macro can definately decide whether either of `p' or `e' is the valid exponent character within the current context.
0x4E+0x23 is a single preprocessing number. If that cannot be turned into a valid token then the program is malformed. Put in some space.
*** Bug 45184 has been marked as a duplicate of this bug. ***
Dup of bug 3885. *** This bug has been marked as a duplicate of bug 3885 ***