cmake: really enable warnings with clang
Even though `PICKY_COMPILER=ON` is the default, warnings were not enabled when using llvm/clang, because `CMAKE_COMPILER_IS_CLANG` was always false (in my tests at least). This is the single use of this variable in curl, and in a different place we already use `CMAKE_C_COMPILER_ID MATCHES "Clang"`, which works as expected, so change the condition to use that instead. Also fix the warnings uncovered by the above: - lib: add casts to silence clang warnings - schannel: add casts to silence clang warnings in ALPN code Assuming the code is correct, solve the warnings with a cast. This particular build case isn't CI tested. There is a chance the warning is relevant for some platforms, perhaps Windows 32-bit ARM7. Closes #9783
This commit is contained in:
Родитель
df77eff278
Коммит
811c799f2d
|
@ -126,7 +126,7 @@ cmake_dependent_option(ENABLE_THREADED_RESOLVER "Set to ON to enable threaded DN
|
|||
option(ENABLE_DEBUG "Set to ON to enable curl debug features" OFF)
|
||||
option(ENABLE_CURLDEBUG "Set to ON to build with TrackMemory feature enabled" OFF)
|
||||
|
||||
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG)
|
||||
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||
if(PICKY_COMPILER)
|
||||
foreach(_CCOPT -pedantic -Wall -W -Wpointer-arith -Wwrite-strings -Wunused -Wshadow -Winline -Wnested-externs -Wmissing-declarations -Wmissing-prototypes -Wfloat-equal -Wsign-compare -Wundef -Wendif-labels -Wstrict-prototypes -Wdeclaration-after-statement -Wstrict-aliasing=3 -Wcast-align -Wtype-limits -Wold-style-declaration -Wmissing-parameter-type -Wempty-body -Wclobbered -Wignored-qualifiers -Wconversion -Wvla -Wdouble-promotion -Wenum-conversion -Warith-conversion)
|
||||
# surprisingly, CHECK_C_COMPILER_FLAG needs a new variable to store each new
|
||||
|
|
10
lib/setopt.c
10
lib/setopt.c
|
@ -406,7 +406,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
|
|||
arg = va_arg(param, long);
|
||||
if((arg < CURL_TIMECOND_NONE) || (arg >= CURL_TIMECOND_LAST))
|
||||
return CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
data->set.timecondition = (curl_TimeCond)arg;
|
||||
data->set.timecondition = (unsigned char)(curl_TimeCond)arg;
|
||||
break;
|
||||
case CURLOPT_TIMEVALUE:
|
||||
/*
|
||||
|
@ -1135,7 +1135,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
|
|||
arg = va_arg(param, long);
|
||||
if((arg < CURLPROXY_HTTP) || (arg > CURLPROXY_SOCKS5_HOSTNAME))
|
||||
return CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
data->set.proxytype = (curl_proxytype)arg;
|
||||
data->set.proxytype = (unsigned char)(curl_proxytype)arg;
|
||||
break;
|
||||
|
||||
case CURLOPT_PROXY_TRANSFER_MODE:
|
||||
|
@ -1234,7 +1234,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
|
|||
arg = va_arg(param, long);
|
||||
if((arg < CURLFTPMETHOD_DEFAULT) || (arg >= CURLFTPMETHOD_LAST))
|
||||
return CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
data->set.ftp_filemethod = (curl_ftpfile)arg;
|
||||
data->set.ftp_filemethod = (unsigned char)(curl_ftpfile)arg;
|
||||
break;
|
||||
case CURLOPT_FTPPORT:
|
||||
/*
|
||||
|
@ -1261,7 +1261,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
|
|||
arg = va_arg(param, long);
|
||||
if((arg < CURLFTPSSL_CCC_NONE) || (arg >= CURLFTPSSL_CCC_LAST))
|
||||
return CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
data->set.ftp_ccc = (curl_ftpccc)arg;
|
||||
data->set.ftp_ccc = (unsigned char)(curl_ftpccc)arg;
|
||||
break;
|
||||
|
||||
case CURLOPT_FTP_SKIP_PASV_IP:
|
||||
|
@ -1289,7 +1289,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
|
|||
arg = va_arg(param, long);
|
||||
if((arg < CURLFTPAUTH_DEFAULT) || (arg >= CURLFTPAUTH_LAST))
|
||||
return CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
data->set.ftpsslauth = (curl_ftpauth)arg;
|
||||
data->set.ftpsslauth = (unsigned char)(curl_ftpauth)arg;
|
||||
break;
|
||||
case CURLOPT_KRBLEVEL:
|
||||
/*
|
||||
|
|
|
@ -2449,7 +2449,7 @@ static CURLcode parse_proxy(struct Curl_easy *data,
|
|||
proxytype == CURLPROXY_SOCKS4;
|
||||
|
||||
proxyinfo = sockstype ? &conn->socks_proxy : &conn->http_proxy;
|
||||
proxyinfo->proxytype = proxytype;
|
||||
proxyinfo->proxytype = (unsigned char)proxytype;
|
||||
|
||||
/* Is there a username and password given in this proxy url? */
|
||||
uc = curl_url_get(uhp, CURLUPART_USER, &proxyuser, CURLU_URLDECODE);
|
||||
|
|
|
@ -1200,18 +1200,18 @@ schannel_connect_step1(struct Curl_easy *data, struct connectdata *conn,
|
|||
|
||||
/* The first four bytes will be an unsigned int indicating number
|
||||
of bytes of data in the rest of the buffer. */
|
||||
extension_len = (unsigned int *)(&alpn_buffer[cur]);
|
||||
extension_len = (unsigned int *)(void *)(&alpn_buffer[cur]);
|
||||
cur += sizeof(unsigned int);
|
||||
|
||||
/* The next four bytes are an indicator that this buffer will contain
|
||||
ALPN data, as opposed to NPN, for example. */
|
||||
*(unsigned int *)&alpn_buffer[cur] =
|
||||
*(unsigned int *)(void *)&alpn_buffer[cur] =
|
||||
SecApplicationProtocolNegotiationExt_ALPN;
|
||||
cur += sizeof(unsigned int);
|
||||
|
||||
/* The next two bytes will be an unsigned short indicating the number
|
||||
of bytes used to list the preferred protocols. */
|
||||
list_len = (unsigned short*)(&alpn_buffer[cur]);
|
||||
list_len = (unsigned short*)(void *)(&alpn_buffer[cur]);
|
||||
cur += sizeof(unsigned short);
|
||||
|
||||
list_start_index = cur;
|
||||
|
|
Загрузка…
Ссылка в новой задаче