https://gcc.gnu.org/bugzilla/show_bug.cgi?id=23087

Keith Thompson <Keith.S.Thompson at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Version|4.0.0                       |5.3.0

--- Comment #13 from Keith Thompson <Keith.S.Thompson at gmail dot com> ---
This problem still exists in gcc 5.3.0.

Here's a perhaps clearer example that doesn't depend on string literals,
and that demonstrates the problem both when plain char is signed
and when it's unsigned.

$ cat tmp.c
#include <limits.h>
void foo(void) {
    char *pc = 0;
#if CHAR_MIN < 0
    /* plain char is signed but incompatible with signed char */
    signed char *psc = pc;
#else
    /* plain char is unsigned but incompatible with unsigned char */
    unsigned char *puc = pc;
#endif
}
$ gcc --version
gcc (GCC) 5.3.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ gcc -std=c11 -pedantic-errors -c tmp.c
tmp.c: In function 'foo':
tmp.c:6:24: error: pointer targets in initialization differ in signedness
[-Wpointer-sign]
     signed char *psc = pc;
                        ^
$ gcc -std=c11 -pedantic-errors -c -funsigned-char tmp.c
tmp.c: In function 'foo':
tmp.c:9:26: error: pointer targets in initialization differ in signedness
[-Wpointer-sign]
     unsigned char *puc = pc;
                          ^
$

Reply via email to