http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39464
--- Comment #13 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-12-07 10:04:58 UTC --- Two of those three will always result in target_cmp != 0, because char is either signed or unsigned, so for -fsigned-char we don't warn on signed char *p = (char *) ptr; char *q = (signed char *) ptr; and similarly for -funsigned-char and s/signed/unsigned/g.