Hi!

For the following program:


    $ cat buf.c
    #include <stdio.h>

    int main(void)
    {
        char *p, buf[5];

        p = buf + 6;
        printf("%p\n", p);
    }


There are no warnings in gcc, as I would expect:

    $ gcc -Wall -Wextra buf.c -O0

Clang does warn, however:

    $ clang -Weverything -Wall -Wextra buf.c -O0
buf.c:8:17: warning: format specifies type 'void *' but the argument has type 'char *' [-Wformat-pedantic]
        printf("%p\n", p);
                ~~     ^
                %s
buf.c:7:6: warning: the pointer incremented by 6 refers past the end of the array (that contains 5 elements) [-Warray-bounds-pointer-arithmetic]
        p = buf + 6;
            ^     ~
    buf.c:5:2: note: array 'buf' declared here
        char *p, buf[5];
        ^
    2 warnings generated.

Cheers,

Alex


--
<http://www.alejandro-colomar.es/>

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

Reply via email to