https://gcc.gnu.org/bugzilla/show_bug.cgi?id=23087
--- Comment #17 from Keith Thompson <Keith.S.Thompson at gmail dot com> --- I just took a quick look at the discussion on the gcc-patches mailing list. It's true that the standard doesn't classify plain "char" either as a signed integer type or as an unsigned integer type. But I think that 99% of users think of plain "char" as either signed or unsigned, not some third kind of signedness. If plain "char" has the same range as "signed char", saying that they "differ in signedness" is just confusing. (Even to me, and I read ISO language standards for fun.) And really, the signedness is not the issue. The issue is that they're incompatible types. I'll also note the documentation of the "-fsigned-char" option: Let the type 'char' be signed, like 'signed char'. It's difficult to tell uses that plain char is not signed when gcc's own documentation says it is. I understand that you might not want to warn about assigning a "signed char*" value to a "char* object in the same circumstances where you'd warn about assigning an "int*" to a "long*". (Both are constraint violations, but that's another kettle of fish.) Perhaps char* vs. signed char* or char* vs. unsigned char* needs to be treated as a special case. But I still say that the existing warning is misleading and at least needs to be rephrased.