Build warnings with clang 6 #2466

Closed
rikardfalkeborn opened this Issue Apr 6, 2018 · 1 comment

Comments

Projects
None yet
2 participants
@rikardfalkeborn
Contributor

rikardfalkeborn commented Apr 6, 2018

I did this

Built curl with clang 6.0.0.

$ ./buildconf
$ ./configure --enable-debug --enable-warnings --enable-werror CC=clang
$ make check
$ clang --version
clang version 6.0.0 (tags/RELEASE_600/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

I expected the following

Successful build. Instead, I got this:

unit1309.c:91:24: error: arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension [-Werror,-Wnull-pointer-arithmetic]
    nodes[i].payload = CURLX_INTEGER_TO_POINTER_CAST(payload);
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../lib/warnless.h:32:26: note: expanded from macro 'CURLX_INTEGER_TO_POINTER_CAST'                                                                                
  ((void *)((char *)NULL + (i)))
            ~~~~~~~~~~~~ ^
unit1309.c:125:34: error: arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension [-Werror,-Wnull-pointer-arithmetic]              
      nodes[i * 3 + j].payload = CURLX_INTEGER_TO_POINTER_CAST(payload);
                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../lib/warnless.h:32:26: note: expanded from macro 'CURLX_INTEGER_TO_POINTER_CAST'                                                                                
  ((void *)((char *)NULL + (i)))

Looks like this warning has been improved/changed in clang 6. From http://releases.llvm.org/6.0.0/tools/clang/docs/ReleaseNotes.html#improvements-to-clang-s-diagnostics

-Wnull-pointer-arithmetic now warns about performing pointer arithmetic on a null pointer. Such pointer arithmetic has an undefined behavior if the offset is nonzero. It also now warns about arithmetic on a null pointer treated as a cast from integer to pointer (GNU extension).

curl/libcurl version

$ git rev-parse HEAD
dd03e8c281582af454fabfb4a666a5b232d518aa
$ ./src/curl -V 
curl 7.60.0-DEV (x86_64-pc-linux-gnu) libcurl/7.60.0-DEV OpenSSL/1.1.0h zlib/1.2.11 brotli/1.0.2 libidn2/2.0.4 libpsl/0.20.1 (+libidn2/2.0.4) nghttp2/1.31.0 librtmp/2.3
Release-Date: [unreleased]
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS Debug TrackMemory IDN IPv6 Largefile NTLM NTLM_WB SSL libz brotli TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL 

operating system

Linux (Arch Linux)

@bagder bagder added build tests labels Apr 7, 2018

bagder added a commit that referenced this issue Apr 7, 2018

unit1309: cleanup to fix clang warnings/errors
unit1309.c:91:24: error: arithmetic on a null pointer treated as a cast
from integer to pointer is a GNU extension

Reported-by: Rikard Falkeborn

Fixes #2466
@rikardfalkeborn

This comment has been minimized.

Show comment Hide comment
@rikardfalkeborn

rikardfalkeborn Apr 7, 2018

Contributor

#2468 fixes the reported warnings. However, if I enable gnutls (--with-gnutls) I get the same warning in the last place CURLX_INTEGER_TO_POINTER_CAST is used:

  CC       vtls/libcurl_la-gtls.lo
vtls/gtls.c:851:21: error: arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension [-Werror,-Wnull-pointer-arithmetic]
    transport_ptr = CURLX_INTEGER_TO_POINTER_CAST(conn->sock[sockindex]);
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../lib/warnless.h:32:26: note: expanded from macro 'CURLX_INTEGER_TO_POINTER_CAST'                                                                                   
  ((void *)((char *)NULL + (i)))
            ~~~~~~~~~~~~ ^
1 error generated.

Note that there is not warning from CURLX_POINTER_TO_INTEGER_CAST.

Contributor

rikardfalkeborn commented Apr 7, 2018

#2468 fixes the reported warnings. However, if I enable gnutls (--with-gnutls) I get the same warning in the last place CURLX_INTEGER_TO_POINTER_CAST is used:

  CC       vtls/libcurl_la-gtls.lo
vtls/gtls.c:851:21: error: arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension [-Werror,-Wnull-pointer-arithmetic]
    transport_ptr = CURLX_INTEGER_TO_POINTER_CAST(conn->sock[sockindex]);
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../lib/warnless.h:32:26: note: expanded from macro 'CURLX_INTEGER_TO_POINTER_CAST'                                                                                   
  ((void *)((char *)NULL + (i)))
            ~~~~~~~~~~~~ ^
1 error generated.

Note that there is not warning from CURLX_POINTER_TO_INTEGER_CAST.

bagder added a commit that referenced this issue Apr 7, 2018

build: cleanup to fix clang warnings/errors
unit1309 and vtls/gtls: error: arithmetic on a null pointer treated as a
cast from integer to pointer is a GNU extension

Reported-by: Rikard Falkeborn

Fixes #2466

@bagder bagder closed this in dc1b6c5 Apr 8, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment