From 9c1806ae4684ec5ef1aeb39bb9f15cece1c27256 Mon Sep 17 00:00:00 2001 From: Jay Satiro Date: Sat, 30 Nov 2019 03:29:36 -0500 Subject: [PATCH] build: Disable Visual Studio warning "conditional expression is constant" - Disable warning C4127 "conditional expression is constant" globally in curl_setup.h for when building with Microsoft's compiler. This mainly affects building with the Visual Studio project files found in the projects dir. Prior to this change the cmake and winbuild build systems already disabled 4127 globally for when building with Microsoft's compiler. Also, 4127 was already disabled for all build systems in the limited circumstance of the WHILE_FALSE macro which disabled the warning specifically for while(0). This commit removes the WHILE_FALSE macro and all other cruft in favor of disabling globally in curl_setup. Background: We have various macros that cause 0 or 1 to be evaluated, which would cause warning C4127 in Visual Studio. For example this causes it: #define Curl_resolver_asynch() 1 Full behavior is not clearly defined and inconsistent across versions. However it is documented that since VS 2015 Update 3 Microsoft has addressed this somewhat but not entirely, not warning on while(true) for example. Prior to this change some C4127 warnings occurred when I built with Visual Studio using the generated projects in the projects dir. Closes https://github.com/curl/curl/pull/4658 --- lib/CMakeLists.txt | 1 - lib/cookie.c | 2 +- lib/curl_multibyte.h | 4 +-- lib/curl_setup.h | 10 ++++++- lib/curl_setup_once.h | 25 ++-------------- lib/doh.c | 2 +- lib/http2.c | 2 +- lib/ldap.c | 2 +- lib/memdebug.h | 2 +- lib/mprintf.c | 2 +- lib/select.h | 2 +- lib/sendf.c | 2 +- lib/sha256.c | 4 +-- lib/telnet.c | 4 +-- lib/transfer.c | 2 +- lib/url.c | 2 +- lib/vquic/ngtcp2.c | 2 +- lib/vquic/quiche.c | 2 +- lib/vssh/libssh.c | 2 +- lib/vtls/nss.c | 2 +- lib/vtls/openssl.c | 4 +-- src/tool_doswin.c | 31 ++----------------- src/tool_easysrc.c | 2 +- src/tool_getparam.c | 2 +- src/tool_metalink.c | 2 +- src/tool_setopt.c | 6 ++-- src/tool_setopt.h | 2 +- tests/libtest/CMakeLists.txt | 4 --- tests/libtest/test.h | 58 ++++++++++++++++++------------------ tests/server/CMakeLists.txt | 2 +- tests/unit/curlcheck.h | 4 +-- winbuild/MakefileBuild.vc | 4 +-- 32 files changed, 76 insertions(+), 121 deletions(-) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index eca9a8af93..a9c90b6650 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -20,7 +20,6 @@ list(APPEND HHEADERS if(MSVC) list(APPEND CSOURCES libcurl.rc) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127") endif() # SET(CSOURCES diff --git a/lib/cookie.c b/lib/cookie.c index c9e420ad4b..0091132aa3 100644 --- a/lib/cookie.c +++ b/lib/cookie.c @@ -1227,7 +1227,7 @@ static int cookie_sort_ct(const void *p1, const void *p2) if(!d->field) \ goto fail; \ } \ - } WHILE_FALSE + } while(0) static struct Cookie *dup_cookie(struct Cookie *src) { diff --git a/lib/curl_multibyte.h b/lib/curl_multibyte.h index e30008be4f..5225e1811b 100644 --- a/lib/curl_multibyte.h +++ b/lib/curl_multibyte.h @@ -62,7 +62,7 @@ char *Curl_convert_wchar_to_UTF8(const wchar_t *str_w); #define Curl_convert_UTF8_to_tchar(ptr) Curl_convert_UTF8_to_wchar((ptr)) #define Curl_convert_tchar_to_UTF8(ptr) Curl_convert_wchar_to_UTF8((ptr)) #define Curl_unicodefree(ptr) \ - do {if((ptr)) {free((ptr)); (ptr) = NULL;}} WHILE_FALSE + do {if((ptr)) {free((ptr)); (ptr) = NULL;}} while(0) typedef union { unsigned short *tchar_ptr; @@ -76,7 +76,7 @@ typedef union { #define Curl_convert_UTF8_to_tchar(ptr) (ptr) #define Curl_convert_tchar_to_UTF8(ptr) (ptr) #define Curl_unicodefree(ptr) \ - do {(ptr) = NULL;} WHILE_FALSE + do {(ptr) = NULL;} while(0) typedef union { char *tchar_ptr; diff --git a/lib/curl_setup.h b/lib/curl_setup.h index b4ba92931b..cc36e28ec8 100644 --- a/lib/curl_setup.h +++ b/lib/curl_setup.h @@ -26,6 +26,14 @@ #define CURL_NO_OLDIES #endif +/* + * Disable Visual Studio warnings: + * 4127 "conditional expression is constant" + */ +#ifdef _MSC_VER +#pragma warning(disable:4127) +#endif + /* * Define WIN32 when build target is Win32 API */ @@ -714,7 +722,7 @@ int netware_init(void); */ #ifndef Curl_nop_stmt -# define Curl_nop_stmt do { } WHILE_FALSE +# define Curl_nop_stmt do { } while(0) #endif /* diff --git a/lib/curl_setup_once.h b/lib/curl_setup_once.h index 413ccea917..9d504cb6e3 100644 --- a/lib/curl_setup_once.h +++ b/lib/curl_setup_once.h @@ -329,27 +329,6 @@ struct timeval { #include "curl_ctype.h" -/* - * Macro WHILE_FALSE may be used to build single-iteration do-while loops, - * avoiding compiler warnings. Mostly intended for other macro definitions. - */ - -#define WHILE_FALSE while(0) - -#if defined(_MSC_VER) && !defined(__POCC__) -# undef WHILE_FALSE -# if (_MSC_VER < 1500) -# define WHILE_FALSE while(1, 0) -# else -# define WHILE_FALSE \ -__pragma(warning(push)) \ -__pragma(warning(disable:4127)) \ -while(0) \ -__pragma(warning(pop)) -# endif -#endif - - /* * Typedef to 'int' if sig_atomic_t is not an available 'typedefed' type. */ @@ -387,7 +366,7 @@ typedef int sig_atomic_t; #ifdef DEBUGBUILD #define DEBUGF(x) x #else -#define DEBUGF(x) do { } WHILE_FALSE +#define DEBUGF(x) do { } while(0) #endif @@ -398,7 +377,7 @@ typedef int sig_atomic_t; #if defined(DEBUGBUILD) && defined(HAVE_ASSERT_H) #define DEBUGASSERT(x) assert(x) #else -#define DEBUGASSERT(x) do { } WHILE_FALSE +#define DEBUGASSERT(x) do { } while(0) #endif diff --git a/lib/doh.c b/lib/doh.c index 1588a7f32f..c8735a6481 100644 --- a/lib/doh.c +++ b/lib/doh.c @@ -218,7 +218,7 @@ do { \ result = curl_easy_setopt(doh, x, y); \ if(result) \ goto error; \ -} WHILE_FALSE +} while(0) static CURLcode dohprobe(struct Curl_easy *data, struct dnsprobe *p, DNStype dnstype, diff --git a/lib/http2.c b/lib/http2.c index 6315fc4014..b741aed483 100644 --- a/lib/http2.c +++ b/lib/http2.c @@ -68,7 +68,7 @@ #ifdef DEBUG_HTTP2 #define H2BUGF(x) x #else -#define H2BUGF(x) do { } WHILE_FALSE +#define H2BUGF(x) do { } while(0) #endif diff --git a/lib/ldap.c b/lib/ldap.c index af3d61c57e..771edb4e98 100644 --- a/lib/ldap.c +++ b/lib/ldap.c @@ -112,7 +112,7 @@ static void _ldap_free_urldesc(LDAPURLDesc *ludp); #define LDAP_TRACE(x) do { \ _ldap_trace("%u: ", __LINE__); \ _ldap_trace x; \ - } WHILE_FALSE + } while(0) static void _ldap_trace(const char *fmt, ...); #else diff --git a/lib/memdebug.h b/lib/memdebug.h index 5236f60fa5..7ca4426269 100644 --- a/lib/memdebug.h +++ b/lib/memdebug.h @@ -169,6 +169,6 @@ CURL_EXTERN int curl_dbg_fclose(FILE *file, int line, const char *source); */ #define Curl_safefree(ptr) \ - do { free((ptr)); (ptr) = NULL;} WHILE_FALSE + do { free((ptr)); (ptr) = NULL;} while(0) #endif /* HEADER_CURL_MEMDEBUG_H */ diff --git a/lib/mprintf.c b/lib/mprintf.c index 4234e1bf45..bc0091351d 100644 --- a/lib/mprintf.c +++ b/lib/mprintf.c @@ -104,7 +104,7 @@ static const char upper_digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; done++; \ else \ return done; /* return immediately on failure */ \ - } WHILE_FALSE + } while(0) /* Data type to read from the arglist */ typedef enum { diff --git a/lib/select.h b/lib/select.h index f5652a74f7..687ab164c4 100644 --- a/lib/select.h +++ b/lib/select.h @@ -109,7 +109,7 @@ int tpf_select_libcurl(int maxfds, fd_set* reads, fd_set* writes, SET_SOCKERRNO(EINVAL); \ return -1; \ } \ -} WHILE_FALSE +} while(0) #endif #endif /* HEADER_CURL_SELECT_H */ diff --git a/lib/sendf.c b/lib/sendf.c index 000fbb1641..6c38b04b23 100644 --- a/lib/sendf.c +++ b/lib/sendf.c @@ -224,7 +224,7 @@ bool Curl_recv_has_postponed_data(struct connectdata *conn, int sockindex) (void)sockindex; return false; } -#define pre_receive_plain(c,n) do {} WHILE_FALSE +#define pre_receive_plain(c,n) do {} while(0) #define get_pre_recved(c,n,b,l) 0 #endif /* ! USE_RECV_BEFORE_SEND_WORKAROUND */ diff --git a/lib/sha256.c b/lib/sha256.c index b467ee558b..bcaaeae308 100644 --- a/lib/sha256.c +++ b/lib/sha256.c @@ -58,7 +58,7 @@ do { \ (a)[1] = (unsigned char)((((unsigned long) (val)) >> 16) & 0xff); \ (a)[2] = (unsigned char)((((unsigned long) (val)) >> 8) & 0xff); \ (a)[3] = (unsigned char)(((unsigned long) (val)) & 0xff); \ -} WHILE_FALSE; +} while(0) #ifdef HAVE_LONGLONG #define WPA_PUT_BE64(a, val) \ @@ -71,7 +71,7 @@ do { \ (a)[5] = (unsigned char)(((unsigned long long)(val)) >> 16); \ (a)[6] = (unsigned char)(((unsigned long long)(val)) >> 8); \ (a)[7] = (unsigned char)(((unsigned long long)(val)) & 0xff); \ -} WHILE_FALSE; +} while(0) #else #define WPA_PUT_BE64(a, val) \ do { \ diff --git a/lib/telnet.c b/lib/telnet.c index 955255c36c..4bf4c652c2 100644 --- a/lib/telnet.c +++ b/lib/telnet.c @@ -69,12 +69,12 @@ do { \ x->subend = x->subpointer; \ CURL_SB_CLEAR(x); \ - } WHILE_FALSE + } while(0) #define CURL_SB_ACCUM(x,c) \ do { \ if(x->subpointer < (x->subbuffer + sizeof(x->subbuffer))) \ *x->subpointer++ = (c); \ - } WHILE_FALSE + } while(0) #define CURL_SB_GET(x) ((*x->subpointer++)&0xff) #define CURL_SB_LEN(x) (x->subend - x->subpointer) diff --git a/lib/transfer.c b/lib/transfer.c index f16e29bdb0..ead8b36db9 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -1177,7 +1177,7 @@ static CURLcode readwrite_upload(struct Curl_easy *data, } - } WHILE_FALSE; /* just to break out from! */ + } while(0); /* just to break out from! */ return CURLE_OK; } diff --git a/lib/url.c b/lib/url.c index 99a8b13599..1af9f90e0a 100644 --- a/lib/url.c +++ b/lib/url.c @@ -674,7 +674,7 @@ static void conn_reset_all_postponed_data(struct connectdata *conn) } #else /* ! USE_RECV_BEFORE_SEND_WORKAROUND */ /* Use "do-nothing" macro instead of function when workaround not used */ -#define conn_reset_all_postponed_data(c) do {} WHILE_FALSE +#define conn_reset_all_postponed_data(c) do {} while(0) #endif /* ! USE_RECV_BEFORE_SEND_WORKAROUND */ diff --git a/lib/vquic/ngtcp2.c b/lib/vquic/ngtcp2.c index 7d8b98e90c..c39dba23a1 100644 --- a/lib/vquic/ngtcp2.c +++ b/lib/vquic/ngtcp2.c @@ -49,7 +49,7 @@ #ifdef DEBUG_HTTP3 #define H3BUGF(x) x #else -#define H3BUGF(x) do { } WHILE_FALSE +#define H3BUGF(x) do { } while(0) #endif /* diff --git a/lib/vquic/quiche.c b/lib/vquic/quiche.c index b2c98d255a..e2f43237fa 100644 --- a/lib/vquic/quiche.c +++ b/lib/vquic/quiche.c @@ -45,7 +45,7 @@ #ifdef DEBUG_HTTP3 #define H3BUGF(x) x #else -#define H3BUGF(x) do { } WHILE_FALSE +#define H3BUGF(x) do { } while(0) #endif #define QUIC_MAX_STREAMS (256*1024) diff --git a/lib/vssh/libssh.c b/lib/vssh/libssh.c index ef87452465..070879d946 100644 --- a/lib/vssh/libssh.c +++ b/lib/vssh/libssh.c @@ -98,7 +98,7 @@ /* A recent macro provided by libssh. Or make our own. */ #ifndef SSH_STRING_FREE_CHAR #define SSH_STRING_FREE_CHAR(x) \ - do { if((x) != NULL) { ssh_string_free_char(x); x = NULL; } } WHILE_FALSE + do { if((x) != NULL) { ssh_string_free_char(x); x = NULL; } } while(0) #endif /* Local functions: */ diff --git a/lib/vtls/nss.c b/lib/vtls/nss.c index a375f00da2..ef51b0d912 100644 --- a/lib/vtls/nss.c +++ b/lib/vtls/nss.c @@ -113,7 +113,7 @@ typedef struct { ptr->type = (_type); \ ptr->pValue = (_val); \ ptr->ulValueLen = (_len); \ -} WHILE_FALSE +} while(0) #define CERT_NewTempCertificate __CERT_NewTempCertificate diff --git a/lib/vtls/openssl.c b/lib/vtls/openssl.c index 32d0e449e7..7c6854d1f8 100644 --- a/lib/vtls/openssl.c +++ b/lib/vtls/openssl.c @@ -3077,7 +3077,7 @@ do { \ Curl_ssl_push_certinfo_len(data, _num, _label, ptr, info_len); \ if(1 != BIO_reset(mem)) \ break; \ -} WHILE_FALSE +} while(0) static void pubkey_show(struct Curl_easy *data, BIO *mem, @@ -3109,7 +3109,7 @@ do { \ if(_type->_name) { \ pubkey_show(data, mem, _num, #_type, #_name, _type->_name); \ } \ -} WHILE_FALSE +} while(0) #endif static int X509V3_ext(struct Curl_easy *data, diff --git a/src/tool_doswin.c b/src/tool_doswin.c index 779a3cb8fd..a64a81633f 100644 --- a/src/tool_doswin.c +++ b/src/tool_doswin.c @@ -38,33 +38,6 @@ #include "memdebug.h" /* keep this as LAST include */ -/* - * Macros ALWAYS_TRUE and ALWAYS_FALSE are used to avoid compiler warnings. - */ - -#define ALWAYS_TRUE (1) -#define ALWAYS_FALSE (0) - -#if defined(_MSC_VER) && !defined(__POCC__) -# undef ALWAYS_TRUE -# undef ALWAYS_FALSE -# if (_MSC_VER < 1500) -# define ALWAYS_TRUE (0, 1) -# define ALWAYS_FALSE (1, 0) -# else -# define ALWAYS_TRUE \ -__pragma(warning(push)) \ -__pragma(warning(disable:4127)) \ -(1) \ -__pragma(warning(pop)) -# define ALWAYS_FALSE \ -__pragma(warning(push)) \ -__pragma(warning(disable:4127)) \ -(0) \ -__pragma(warning(pop)) -# endif -#endif - #ifdef WIN32 # undef PATH_MAX # define PATH_MAX MAX_PATH @@ -79,9 +52,9 @@ __pragma(warning(pop)) #endif #ifdef WIN32 -# define _use_lfn(f) ALWAYS_TRUE /* long file names always available */ +# define _use_lfn(f) (1) /* long file names always available */ #elif !defined(__DJGPP__) || (__DJGPP__ < 2) /* DJGPP 2.0 has _use_lfn() */ -# define _use_lfn(f) ALWAYS_FALSE /* long file names never available */ +# define _use_lfn(f) (0) /* long file names never available */ #elif defined(__DJGPP__) # include /* _use_lfn(f) prototype */ #endif diff --git a/src/tool_easysrc.c b/src/tool_easysrc.c index cb30e404bb..87ad4bbaa8 100644 --- a/src/tool_easysrc.c +++ b/src/tool_easysrc.c @@ -123,7 +123,7 @@ CURLcode easysrc_addf(struct slist_wc **plist, const char *fmt, ...) return ret; } -#define CHKRET(v) do {CURLcode ret = (v); if(ret) return ret;} WHILE_FALSE +#define CHKRET(v) do {CURLcode ret = (v); if(ret) return ret;} while(0) CURLcode easysrc_init(void) { diff --git a/src/tool_getparam.c b/src/tool_getparam.c index 3efc23e1e5..a7bcdafacc 100644 --- a/src/tool_getparam.c +++ b/src/tool_getparam.c @@ -58,7 +58,7 @@ if(!(*(str))) \ return PARAM_NO_MEM; \ } \ -} WHILE_FALSE +} while(0) struct LongShort { const char *letter; /* short name option */ diff --git a/src/tool_metalink.c b/src/tool_metalink.c index 889da4bffe..6d62f2d938 100644 --- a/src/tool_metalink.c +++ b/src/tool_metalink.c @@ -119,7 +119,7 @@ struct win32_crypto_hash { *(str) = strdup((val)); \ if(!(val)) \ return PARAM_NO_MEM; \ -} WHILE_FALSE +} while(0) #if defined(USE_OPENSSL) /* Functions are already defined */ diff --git a/src/tool_setopt.c b/src/tool_setopt.c index 4c98d9057f..e56af1317f 100644 --- a/src/tool_setopt.c +++ b/src/tool_setopt.c @@ -181,18 +181,18 @@ static const NameValue setopt_nv_CURLNONZERODEFAULTS[] = { ret = easysrc_add args; \ if(ret) \ goto nomem; \ -} WHILE_FALSE +} while(0) #define ADDF(args) do { \ ret = easysrc_addf args; \ if(ret) \ goto nomem; \ -} WHILE_FALSE +} while(0) #define NULL_CHECK(p) do { \ if(!p) { \ ret = CURLE_OUT_OF_MEMORY; \ goto nomem; \ } \ -} WHILE_FALSE +} while(0) #define DECL0(s) ADD((&easysrc_decl, s)) #define DECL1(f,a) ADDF((&easysrc_decl, f,a)) diff --git a/src/tool_setopt.h b/src/tool_setopt.h index 63401337fa..48e9e818de 100644 --- a/src/tool_setopt.h +++ b/src/tool_setopt.h @@ -35,7 +35,7 @@ if(result) \ break; \ } \ - } WHILE_FALSE + } while(0) /* allow removed features to simulate success: */ bool tool_setopt_skip(CURLoption tag); diff --git a/tests/libtest/CMakeLists.txt b/tests/libtest/CMakeLists.txt index aa70d053d0..6b14ad3e32 100644 --- a/tests/libtest/CMakeLists.txt +++ b/tests/libtest/CMakeLists.txt @@ -1,9 +1,5 @@ set(TARGET_LABEL_PREFIX "Test ") -if(MSVC) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127") -endif() - function(setup_test TEST_NAME) # ARGN are the files in the test add_executable( ${TEST_NAME} ${ARGN} ) string(TOUPPER ${TEST_NAME} UPPER_TEST_NAME) diff --git a/tests/libtest/test.h b/tests/libtest/test.h index 3c8323de4c..fd88365c69 100644 --- a/tests/libtest/test.h +++ b/tests/libtest/test.h @@ -131,7 +131,7 @@ extern int unitfail; fprintf(stderr, "%s:%d curl_easy_init() failed\n", (Y), (Z)); \ res = TEST_ERR_EASY_INIT; \ } \ -} WHILE_FALSE +} while(0) #define res_easy_init(A) \ exe_easy_init((A), (__FILE__), (__LINE__)) @@ -140,7 +140,7 @@ extern int unitfail; exe_easy_init((A), (Y), (Z)); \ if(res) \ goto test_cleanup; \ -} WHILE_FALSE +} while(0) #define easy_init(A) \ chk_easy_init((A), (__FILE__), (__LINE__)) @@ -152,7 +152,7 @@ extern int unitfail; fprintf(stderr, "%s:%d curl_multi_init() failed\n", (Y), (Z)); \ res = TEST_ERR_MULTI_INIT; \ } \ -} WHILE_FALSE +} while(0) #define res_multi_init(A) \ exe_multi_init((A), (__FILE__), (__LINE__)) @@ -161,7 +161,7 @@ extern int unitfail; exe_multi_init((A), (Y), (Z)); \ if(res) \ goto test_cleanup; \ -} WHILE_FALSE +} while(0) #define multi_init(A) \ chk_multi_init((A), (__FILE__), (__LINE__)) @@ -176,7 +176,7 @@ extern int unitfail; (Y), (Z), (int)ec, curl_easy_strerror(ec)); \ res = (int)ec; \ } \ -} WHILE_FALSE +} while(0) #define res_easy_setopt(A, B, C) \ exe_easy_setopt((A), (B), (C), (__FILE__), (__LINE__)) @@ -185,7 +185,7 @@ extern int unitfail; exe_easy_setopt((A), (B), (C), (Y), (Z)); \ if(res) \ goto test_cleanup; \ -} WHILE_FALSE +} while(0) #define easy_setopt(A, B, C) \ chk_easy_setopt((A), (B), (C), (__FILE__), (__LINE__)) @@ -200,7 +200,7 @@ extern int unitfail; (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ res = (int)ec; \ } \ -} WHILE_FALSE +} while(0) #define res_multi_setopt(A,B,C) \ exe_multi_setopt((A), (B), (C), (__FILE__), (__LINE__)) @@ -209,7 +209,7 @@ extern int unitfail; exe_multi_setopt((A), (B), (C), (Y), (Z)); \ if(res) \ goto test_cleanup; \ -} WHILE_FALSE +} while(0) #define multi_setopt(A,B,C) \ chk_multi_setopt((A), (B), (C), (__FILE__), (__LINE__)) @@ -224,7 +224,7 @@ extern int unitfail; (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ res = (int)ec; \ } \ -} WHILE_FALSE +} while(0) #define res_multi_add_handle(A, B) \ exe_multi_add_handle((A), (B), (__FILE__), (__LINE__)) @@ -233,7 +233,7 @@ extern int unitfail; exe_multi_add_handle((A), (B), (Y), (Z)); \ if(res) \ goto test_cleanup; \ -} WHILE_FALSE +} while(0) #define multi_add_handle(A, B) \ chk_multi_add_handle((A), (B), (__FILE__), (__LINE__)) @@ -248,7 +248,7 @@ extern int unitfail; (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ res = (int)ec; \ } \ -} WHILE_FALSE +} while(0) #define res_multi_remove_handle(A, B) \ exe_multi_remove_handle((A), (B), (__FILE__), (__LINE__)) @@ -257,7 +257,7 @@ extern int unitfail; exe_multi_remove_handle((A), (B), (Y), (Z)); \ if(res) \ goto test_cleanup; \ -} WHILE_FALSE +} while(0) #define multi_remove_handle(A, B) \ @@ -279,7 +279,7 @@ extern int unitfail; (Y), (Z), (int)*((B))); \ res = TEST_ERR_NUM_HANDLES; \ } \ -} WHILE_FALSE +} while(0) #define res_multi_perform(A, B) \ exe_multi_perform((A), (B), (__FILE__), (__LINE__)) @@ -288,7 +288,7 @@ extern int unitfail; exe_multi_perform((A), (B), (Y), (Z)); \ if(res) \ goto test_cleanup; \ -} WHILE_FALSE +} while(0) #define multi_perform(A,B) \ chk_multi_perform((A), (B), (__FILE__), (__LINE__)) @@ -309,7 +309,7 @@ extern int unitfail; (Y), (Z), (int)*((E))); \ res = TEST_ERR_NUM_HANDLES; \ } \ -} WHILE_FALSE +} while(0) #define res_multi_fdset(A, B, C, D, E) \ exe_multi_fdset((A), (B), (C), (D), (E), (__FILE__), (__LINE__)) @@ -318,7 +318,7 @@ extern int unitfail; exe_multi_fdset((A), (B), (C), (D), (E), (Y), (Z)); \ if(res) \ goto test_cleanup; \ - } WHILE_FALSE + } while(0) #define multi_fdset(A, B, C, D, E) \ chk_multi_fdset((A), (B), (C), (D), (E), (__FILE__), (__LINE__)) @@ -339,7 +339,7 @@ extern int unitfail; (Y), (Z), (long)*((B))); \ res = TEST_ERR_BAD_TIMEOUT; \ } \ -} WHILE_FALSE +} while(0) #define res_multi_timeout(A, B) \ exe_multi_timeout((A), (B), (__FILE__), (__LINE__)) @@ -348,7 +348,7 @@ extern int unitfail; exe_multi_timeout((A), (B), (Y), (Z)); \ if(res) \ goto test_cleanup; \ - } WHILE_FALSE + } while(0) #define multi_timeout(A, B) \ chk_multi_timeout((A), (B), (__FILE__), (__LINE__)) @@ -369,7 +369,7 @@ extern int unitfail; (Y), (Z), (int)*((E))); \ res = TEST_ERR_NUM_HANDLES; \ } \ -} WHILE_FALSE +} while(0) #define res_multi_poll(A, B, C, D, E) \ exe_multi_poll((A), (B), (C), (D), (E), (__FILE__), (__LINE__)) @@ -378,7 +378,7 @@ extern int unitfail; exe_multi_poll((A), (B), (C), (D), (E), (Y), (Z)); \ if(res) \ goto test_cleanup; \ -} WHILE_FALSE +} while(0) #define multi_poll(A, B, C, D, E) \ chk_multi_poll((A), (B), (C), (D), (E), (__FILE__), (__LINE__)) @@ -393,7 +393,7 @@ extern int unitfail; (Y), (Z), (int)ec, curl_multi_strerror(ec)); \ res = (int)ec; \ } \ -} WHILE_FALSE +} while(0) #define res_multi_wakeup(A) \ exe_multi_wakeup((A), (__FILE__), (__LINE__)) @@ -402,7 +402,7 @@ extern int unitfail; exe_multi_wakeup((A), (Y), (Z)); \ if(res) \ goto test_cleanup; \ -} WHILE_FALSE +} while(0) #define multi_wakeup(A) \ chk_multi_wakeup((A), (__FILE__), (__LINE__)) @@ -418,7 +418,7 @@ extern int unitfail; (Y), (Z), ec, strerror(ec)); \ res = TEST_ERR_SELECT; \ } \ - } WHILE_FALSE + } while(0) #define res_select_test(A, B, C, D, E) \ exe_select_test((A), (B), (C), (D), (E), (__FILE__), (__LINE__)) @@ -427,7 +427,7 @@ extern int unitfail; exe_select_test((A), (B), (C), (D), (E), (Y), (Z)); \ if(res) \ goto test_cleanup; \ - } WHILE_FALSE + } while(0) #define select_test(A, B, C, D, E) \ chk_select_test((A), (B), (C), (D), (E), (__FILE__), (__LINE__)) @@ -436,7 +436,7 @@ extern int unitfail; #define start_test_timing() do { \ tv_test_start = tutil_tvnow(); \ -} WHILE_FALSE +} while(0) #define exe_test_timedout(Y,Z) do { \ if(tutil_tvdiff(tutil_tvnow(), tv_test_start) > TEST_HANG_TIMEOUT) { \ @@ -444,7 +444,7 @@ extern int unitfail; "that it would have run forever.\n", (Y), (Z)); \ res = TEST_ERR_RUNS_FOREVER; \ } \ -} WHILE_FALSE +} while(0) #define res_test_timedout() \ exe_test_timedout((__FILE__), (__LINE__)) @@ -453,7 +453,7 @@ extern int unitfail; exe_test_timedout(Y, Z); \ if(res) \ goto test_cleanup; \ - } WHILE_FALSE + } while(0) #define abort_on_test_timeout() \ chk_test_timedout((__FILE__), (__LINE__)) @@ -468,7 +468,7 @@ extern int unitfail; (Y), (Z), (int)ec, curl_easy_strerror(ec)); \ res = (int)ec; \ } \ -} WHILE_FALSE +} while(0) #define res_global_init(A) \ exe_global_init((A), (__FILE__), (__LINE__)) @@ -477,7 +477,7 @@ extern int unitfail; exe_global_init((A), (Y), (Z)); \ if(res) \ return res; \ - } WHILE_FALSE + } while(0) /* global_init() is different than other macros. In case of failure it 'return's instead of going to 'test_cleanup'. */ diff --git a/tests/server/CMakeLists.txt b/tests/server/CMakeLists.txt index 78b9b70297..d532436085 100644 --- a/tests/server/CMakeLists.txt +++ b/tests/server/CMakeLists.txt @@ -1,7 +1,7 @@ set(TARGET_LABEL_PREFIX "Test server ") if(MSVC) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127 /wd4306") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4306") endif() function(SETUP_EXECUTABLE TEST_NAME) # ARGN are the files in the test diff --git a/tests/unit/curlcheck.h b/tests/unit/curlcheck.h index c358afa6eb..ecc5565330 100644 --- a/tests/unit/curlcheck.h +++ b/tests/unit/curlcheck.h @@ -52,7 +52,7 @@ fprintf(stderr, "%s:%d test failed: '%s'\n", \ __FILE__, __LINE__, msg); \ unitfail++; \ - } WHILE_FALSE + } while(0) /* The abort macros mark the current test step as failed, and exit the test */ @@ -77,7 +77,7 @@ __FILE__, __LINE__, msg); \ unitfail++; \ goto unit_test_abort; \ - } WHILE_FALSE + } while(0) diff --git a/winbuild/MakefileBuild.vc b/winbuild/MakefileBuild.vc index 8267250c24..6f34257c5f 100644 --- a/winbuild/MakefileBuild.vc +++ b/winbuild/MakefileBuild.vc @@ -61,11 +61,11 @@ CC = cl.exe !IF "$(VC)"=="6" CC_NODEBUG = $(CC) /O2 /DNDEBUG CC_DEBUG = $(CC) /Od /Gm /Zi /D_DEBUG /GZ -CFLAGS = /I. /I../lib /I../include /nologo /W4 /wd4127 /GX /DWIN32 /YX /FD /c /DBUILDING_LIBCURL +CFLAGS = /I. /I../lib /I../include /nologo /W4 /GX /DWIN32 /YX /FD /c /DBUILDING_LIBCURL !ELSE CC_NODEBUG = $(CC) /O2 /DNDEBUG CC_DEBUG = $(CC) /Od /D_DEBUG /RTC1 /Z7 /LDd -CFLAGS = /I. /I ../lib /I../include /nologo /W4 /wd4127 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL +CFLAGS = /I. /I ../lib /I../include /nologo /W4 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL !ENDIF LFLAGS = /nologo /machine:$(MACHINE)