In Lex/Token.h, Token::Kind is defined as:
/// Kind - The actual flavor of token this is.
unsigned char Kind; // DON'T make Kind a 'tok::TokenKind';
// MSVC will treat it as a signed char and
// TokenKinds > 127 won't be handled correctly.
Basic/TokenKinds.def, however, creates tokens and keywords from all
languages and dialects that Clang supports. Unfortunately, 'unsigned char'
is no longer suitable for its type, as the number of enum values is already
250 on TOT (and our OpenCL patches under review overflow it).
I think Clang should use 'unsigned' ('unsigned int') for Token::Kind,
similar to Token::UintData. I haven't submitted a bug report yet, as I'd
like to discuss this first.