http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52661
--- Comment #13 from Andrew Pinski <pinskia at gcc dot gnu.org> 2012-03-22 20:54:17 UTC --- First off take: 9223372036854775808LL It is too large to fit into a signed long long so it is assumed as unsigned. That is what the warning is about. What you have is: - 9223372036854775808LL So the parser comes along and see - and then 9223372036854775808LL as separate tokens. It is not warning that the value "-9223372036854775808" is too large but rather just "9223372036854775808LL" is too large. So basically this comes down to there are two separate tokens. Please reread my comments, they have been saying the same thing a couple of different ways. Basically the negative sign is not part of the number token. This is on purpose to make tokenizer simpler and not need extra info from the context around it. like: a -9223372036854775808LL. THis is tokenized as three tokens, not two. It would be hard to do some parsing if it was tokenized as two, the tokenizer would need feedback from the parser itself. That would make the C/C++ really more complex then they are currently.