Red Hat Bugzilla – Bug 43110
Preprocessor misinterprets multiple concatinations
Last modified: 2007-04-18 12:33:30 EDT
From Bugzilla Helper:
User-Agent: Mozilla/4.77 [en] (X11; U; Linux 2.4.2-2smp i686)
Description of problem:
When the preprocessor encounters
The preprocessor throws an error at me when it encounters double
Steps to Reproduce:
The following code, run through the preprocessor (gcc -E) gives an error.
With egcs (egcs -E) it works
#define MC_FUNC(op,xy) \
static void motion_comp_##op####xy##_16x16_c
Actual Results: the preprocessor bundeled with gcc 2.96 gives me
warning: pasting "motion_comp_put" and "##" does not give a valid
Expected Results: I was hoping to get
static void motion_comp_put_16x16_c ;
as output from the preprocessor
The C standard sais if pasting two tokens with ## does not create
a valid preprocessor token, then the behaviour is undefined.
gcc has a warning about this, so that you can fix the code,
if you use just a single ## it will work just fine.
The fact that it used to work with older gcc cannot be an excuse
or broken code.