https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108580
--- Comment #8 from postmaster at raasu dot org --- I know enough C that you can't write code like: int i = 0xFFFFFFFF; This is not equal to: int i = -1; or int i = (-1); --- Largest literal you can assign to "int" is "0x7FFFFFFF". Any larger value must be either result of expression or another variable, otherwise it will result in "arithmetic" overflow warning. Some literals and operations are inherently unsigned, no matter what generic rules say. As I already said, writing "1u << bits" would be incorrect, and strict-conforming or "pedantic" compiler would throw warning as the types don't match and implicit conversion doesn't happen with sizes larger than 32 bits. Type modifiers are otherwise case-insensitive, but don't support mixed-case. C standard doesn't even mention anything about "size_t" or have type modifier for it. Even though printf() and alike support "%z", it is considered extension and will be rejected when using strict/pedantic mode.