[cfe-dev] Premature macro expansion in preprocessor?

Andy Gibbs andyg1001 at hotmail.co.uk
Fri Nov 9 15:10:18 PST 2012


On Friday, November 09, 2012 11:46 PM, Douglas Gregor wrote:
> On Nov 9, 2012, at 2:37 PM, Andy Gibbs wrote:
> 
>> Hi,
>> 
>> In going through the preprocessor code in clang, I have noted a tendancy
>> towards using Lex(Tok) over LexUnexpandedToken(Tok), for example in the
>> built-in macro implementations.
>> 
>> This means, the following "works":
>> 
>> #define HB __has_builtin
>> #define LP (
>> #define BT __builtin_trap
>> #define RP )
>> 
>> HB LP BT RP   // expands to 1
>> 
>> My question is, is this intentional, or an oversight?  Is it worth my
>> while going through and changing Lex(...) to LexUnexpandedToken(...)
>> in these cases?  
> 
> I consider this a bug. The __has_builtin/__has_feature/etc. code should
> be using LexUnexpandedToken.

Ok, I'll have a look at it tomorrow then.  (Too late in the night now!!)

Andy

 



More information about the cfe-dev mailing list