File 0842-erts-Fix-misc-Windows-C-compiler-warnings.patch of Package erlang

From a2e77938f4a8bb21f6a1c778130f9a65c2812c78 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Fri, 17 Apr 2020 13:04:17 +0200
Subject: [PATCH 1/7] erts: Fix misc Windows C compiler warnings

---
 erts/emulator/beam/erl_bif_lists.c         |  4 +--
 erts/emulator/beam/erl_nif.c               | 10 ++++--
 erts/emulator/beam/erl_process.c           |  2 +-
 erts/emulator/beam/erl_process.h           |  1 +
 erts/emulator/drivers/common/inet_drv.c    | 11 +++---
 erts/emulator/drivers/win32/registry_drv.c |  6 ++--
 erts/emulator/drivers/win32/ttsl_drv.c     |  4 +--
 erts/emulator/sys/common/erl_check_io.c    | 39 ++++++++++++----------
 erts/emulator/sys/win32/sys.c              | 10 +++---
 erts/etc/common/heart.c                    |  2 +-
 erts/etc/common/inet_gethost.c             |  3 +-
 erts/etc/win32/erl_log.c                   |  2 +-
 erts/etc/win32/erlsrv/erlsrv_interactive.c |  2 +-
 erts/etc/win32/win_erlexec.c               |  8 ++---
 14 files changed, 56 insertions(+), 48 deletions(-)

diff --git a/erts/emulator/beam/erl_bif_lists.c b/erts/emulator/beam/erl_bif_lists.c
index e315e768d4..74f91e8b52 100644
--- a/erts/emulator/beam/erl_bif_lists.c
+++ b/erts/emulator/beam/erl_bif_lists.c
@@ -954,10 +954,8 @@ static int subtract_continue(Process *p, ErtsSubtractContext *context) {
         case SUBTRACT_STAGE_SET_FINISH: {
             return subtract_set_finish(p, context);
         }
-
-        default:
-            ERTS_ASSERT(!"unreachable");
     }
+    ERTS_INTERNAL_ERROR("unreachable");
 }
 
 static int subtract_start(Process *p, Eterm lhs, Eterm rhs,
diff --git a/erts/emulator/beam/erl_nif.c b/erts/emulator/beam/erl_nif.c
index 87e469dd98..3f29bae8b1 100644
--- a/erts/emulator/beam/erl_nif.c
+++ b/erts/emulator/beam/erl_nif.c
@@ -1761,16 +1761,20 @@ ERL_NIF_TERM enif_make_uint(ErlNifEnv* env, unsigned i)
 
 ERL_NIF_TERM enif_make_long(ErlNifEnv* env, long i)
 {
+#if SIZEOF_LONG < ERTS_SIZEOF_ETERM
+    return make_small(i);
+#else
     if (IS_SSMALL(i)) {
 	return make_small(i);
     }
-#if SIZEOF_LONG == ERTS_SIZEOF_ETERM
+# if SIZEOF_LONG == ERTS_SIZEOF_ETERM
     return small_to_big(i, alloc_heap(env,2));
-#elif SIZEOF_LONG_LONG ==  ERTS_SIZEOF_ETERM
+# elif SIZEOF_LONG_LONG == ERTS_SIZEOF_ETERM
     return make_small(i);
-#elif SIZEOF_LONG == 8
+# elif SIZEOF_LONG == 8
     ensure_heap(env,3);
     return erts_sint64_to_big(i, &env->hp);
+# endif
 #endif
 }
 
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c
index 5b29023fdc..95fc08cb24 100644
--- a/erts/emulator/beam/erl_process.c
+++ b/erts/emulator/beam/erl_process.c
@@ -12059,7 +12059,7 @@ delete_process(Process* p)
      * The mso list should not be used anymore, but if it is, make sure that
      * we'll notice.
      */
-    p->off_heap.first = (void *) 0x8DEFFACD;
+    p->off_heap.first = (void*)(UWord)0x8DEFFACD;
 
     if (p->arg_reg != p->def_arg_reg) {
 	erts_free(ERTS_ALC_T_ARG_REG, p->arg_reg);
diff --git a/erts/emulator/beam/erl_process.h b/erts/emulator/beam/erl_process.h
index 3c606fe9eb..b114e283fe 100644
--- a/erts/emulator/beam/erl_process.h
+++ b/erts/emulator/beam/erl_process.h
@@ -2644,6 +2644,7 @@ erts_get_atom_cache_map(Process *c_p)
  * erl_process.c on windows.
  */
 #  define ERTS_TIME2REDS_IMPL__ erts_time2reds__
+Sint64 erts_time2reds(ErtsMonotonicTime start, ErtsMonotonicTime end);
 #else
 #  define ERTS_TIME2REDS_IMPL__ erts_time2reds
 #endif
diff --git a/erts/emulator/drivers/common/inet_drv.c b/erts/emulator/drivers/common/inet_drv.c
index 2ef452fa01..bbc50923b5 100644
--- a/erts/emulator/drivers/common/inet_drv.c
+++ b/erts/emulator/drivers/common/inet_drv.c
@@ -4626,10 +4626,10 @@ static void desc_close(inet_descriptor* desc)
 	 * be selecting on it.
 	 */
 	if (!INET_IGNORED(desc))
-	    driver_select(desc->port,(ErlDrvEvent)(long)desc->event, 
+	    driver_select(desc->port,(ErlDrvEvent)(SWord)desc->event,
 			  ERL_DRV_USE, 0);
 	else
-	  inet_stop_select((ErlDrvEvent)(long)desc->event,NULL);
+	  inet_stop_select((ErlDrvEvent)(SWord)desc->event,NULL);
 	desc->event = INVALID_EVENT; /* closed by stop_select callback */
 	desc->s = INVALID_SOCKET;
 	desc->event_mask = 0;
@@ -5852,9 +5852,10 @@ static ErlDrvSSizeT inet_ctl_getifaddrs(inet_descriptor* desc_p,
     *buf_p++ = INET_REP_OK;
 
     /* Iterate over MIB_IPADDRTABLE or IP_ADAPTER_ADDRESSES */
-    for (ia_p = NULL, ip_addrs_p ? ((void *)(i = 0)) : (ia_p = ip_adaddrs_p);
+    ia_p = NULL;
+    for (ip_addrs_p ? (void)(i = 0) : (void)(ia_p = ip_adaddrs_p);
 	 ip_addrs_p ? (i < ip_addrs_p->dwNumEntries) : (ia_p != NULL);
-	 ip_addrs_p ? ((void *)(i++)) : (ia_p = ia_p->Next)) {
+	 ip_addrs_p ? (void)(i++) : (void)(ia_p = ia_p->Next)) {
 	MIB_IPADDRROW *ipaddrrow_p = NULL;
 	DWORD flags = INET_IFF_MULTICAST;
 	DWORD index = 0;
@@ -9918,7 +9919,7 @@ static tcp_descriptor* tcp_inet_copy(tcp_descriptor* desc,SOCKET s,
     
     /* The new port will be linked and connected to the original caller */
     port = driver_create_port(port, owner, "tcp_inet", (ErlDrvData) copy_desc);
-    if ((long)port == -1) {
+    if ((SWord)port == -1) {
 	*err = INET_ERRNO_SYSTEM_LIMIT;
 	FREE(copy_desc);
 	return NULL;
diff --git a/erts/emulator/drivers/win32/registry_drv.c b/erts/emulator/drivers/win32/registry_drv.c
index a03a030df8..7d71ef7f53 100644
--- a/erts/emulator/drivers/win32/registry_drv.c
+++ b/erts/emulator/drivers/win32/registry_drv.c
@@ -195,7 +195,7 @@ reg_from_erlang(ErlDrvData clientData, char* buf, ErlDrvSizeT count)
 	     * [HKEY(DWORD), KeyString(string)]
 	     */
 
-	    hkey = (HKEY) get_int32(buf+0);
+	    hkey = (HKEY)(SWord) get_int32(buf+0);
 	    rp->hkey_root = hkey;
 	    key = buf+4;
 	    result = RegOpenKeyEx(hkey, key, 0, rp->sam, &newKey);
@@ -217,7 +217,7 @@ reg_from_erlang(ErlDrvData clientData, char* buf, ErlDrvSizeT count)
 	    HKEY newKey;
 	    DWORD disposition;
 
-	    hkey = (HKEY) get_int32(buf+0);
+	    hkey = (HKEY)(SWord) get_int32(buf+0);
 	    rp->hkey_root = hkey;
 	    key = buf+4;
 	    result = RegCreateKeyEx(hkey, key, 0, "", 0, rp->sam, NULL,
@@ -512,7 +512,7 @@ state_reply(RegPort* rp,	/* Pointer to port structure. */
 
     s[0] = 's';
     i = 1;
-    put_int32((DWORD) root, s+i);
+    put_int32((DWORD)(SWord) root, s+i);
     i += 4;
     memcpy(s+i, name, nameSize);
     ASSERT(i+nameSize == needed);
diff --git a/erts/emulator/drivers/win32/ttsl_drv.c b/erts/emulator/drivers/win32/ttsl_drv.c
index 9b72d1fea9..8d59682766 100644
--- a/erts/emulator/drivers/win32/ttsl_drv.c
+++ b/erts/emulator/drivers/win32/ttsl_drv.c
@@ -149,7 +149,7 @@ static int ttysl_init()
 
 static ErlDrvData ttysl_start(ErlDrvPort port, char* buf)
 {
-    if ((int)ttysl_port != -1 || console_thread == NULL) {
+    if ((SWord)ttysl_port != -1 || console_thread == NULL) {
 	return ERL_DRV_ERROR_GENERAL;
     }
     start_lbuf();
@@ -215,7 +215,7 @@ static ErlDrvSSizeT ttysl_control(ErlDrvData drv_data,
 
 static void ttysl_stop(ErlDrvData ttysl_data)
 {
-    if ((int)ttysl_port != -1) {
+    if ((SWord)ttysl_port != -1) {
         driver_select(ttysl_port, console_input_event, ERL_DRV_READ, 0);
     }
 
diff --git a/erts/emulator/sys/common/erl_check_io.c b/erts/emulator/sys/common/erl_check_io.c
index 344d51f768..d02c2686a4 100644
--- a/erts/emulator/sys/common/erl_check_io.c
+++ b/erts/emulator/sys/common/erl_check_io.c
@@ -184,11 +184,14 @@ int ERTS_WRITE_UNLIKELY(erts_no_pollsets) = 1;
 int ERTS_WRITE_UNLIKELY(erts_no_poll_threads) = 1;
 struct drv_ev_state_shared drv_ev_state;
 
-static ERTS_INLINE int fd_hash(ErtsSysFdType fd) {
+static ERTS_INLINE int fd_hash(ErtsSysFdType fd)
+{
+#ifdef ERTS_SYS_CONTINOUS_FD_NUMBERS
     int hash = (int)fd;
-# ifndef ERTS_SYS_CONTINOUS_FD_NUMBERS
+#else
+    int hash = (int)(SWord)fd;
     hash ^= (hash >> 9);
-# endif
+#endif
     return hash;
 }
 
@@ -1339,7 +1342,7 @@ print_driver_name(erts_dsprintf_buf_t *dsbufp, Eterm id)
 static void
 steal(erts_dsprintf_buf_t *dsbufp, ErtsDrvEventState *state, int mode)
 {
-    erts_dsprintf(dsbufp, "stealing control of fd=%d from ", (int) state->fd);
+    erts_dsprintf(dsbufp, "stealing control of fd=%bpd from ", (SWord) state->fd);
     switch (state->type) {
     case ERTS_EV_TYPE_DRV_SEL: {
 	int deselect_mode = 0;
@@ -1363,7 +1366,7 @@ steal(erts_dsprintf_buf_t *dsbufp, ErtsDrvEventState *state, int mode)
 	if (deselect_mode)
 	    deselect(state, deselect_mode);
 	else {
-	    erts_dsprintf(dsbufp, "no one", (int) state->fd);
+	    erts_dsprintf(dsbufp, "no one");
 	    ASSERT(0);
 	}
 	erts_dsprintf(dsbufp, "\n");
@@ -1394,7 +1397,7 @@ steal(erts_dsprintf_buf_t *dsbufp, ErtsDrvEventState *state, int mode)
 	break;
     }
     default:
-	erts_dsprintf(dsbufp, "no one\n", (int) state->fd);
+	erts_dsprintf(dsbufp, "no one\n");
 	ASSERT(0);
     }
 }
@@ -1405,10 +1408,10 @@ print_drv_select_op(erts_dsprintf_buf_t *dsbufp,
 {
     Port *pp = erts_drvport2port(ix);
     erts_dsprintf(dsbufp,
-		  "driver_select(%p, %d,%s%s%s%s, %d) "
+		  "driver_select(%p, %bpd,%s%s%s%s, %d) "
 		  "by ",
 		  ix,
-		  (int) fd,
+		  (SWord) fd,
 		  mode & ERL_DRV_READ ? " ERL_DRV_READ" : "",
 		  mode & ERL_DRV_WRITE ? " ERL_DRV_WRITE" : "",
 		  mode & ERL_DRV_USE ? " ERL_DRV_USE" : "",
@@ -1424,8 +1427,8 @@ print_nif_select_op(erts_dsprintf_buf_t *dsbufp,
                     ErtsResource* resource, Eterm ref)
 {
     erts_dsprintf(dsbufp,
-		  "enif_select(_, %d,%s%s%s, %T:%T, %T) ",
-		  (int) fd,
+		  "enif_select(_, %bpd,%s%s%s, %T:%T, %T) ",
+		  (SWord) fd,
 		  mode & ERL_NIF_SELECT_READ ? " READ" : "",
 		  mode & ERL_NIF_SELECT_WRITE ? " WRITE" : "",
 		  (mode & ERL_NIF_SELECT_STOP ? " STOP"
@@ -1866,7 +1869,7 @@ erts_check_io(ErtsPollThread *psi, ErtsMonotonicTime timeout_time)
 	    dsbufp = erts_create_logger_dsbuf();
 	    erts_dsprintf(dsbufp,
 			  "Invalid event request type for fd in erts_poll()! "
-			  "fd=%d, event request type=%d\n", (int) state->fd,
+			  "fd=%bpd, event request type=%d\n", (SWord) state->fd,
 			  (int) state->type);
 	    ASSERT(0);
 	    deselect(state, 0);
@@ -1944,8 +1947,8 @@ bad_fd_in_pollset(ErtsDrvEventState *state, Eterm inport, Eterm outport)
 	    }
 	}
 	erts_dsprintf(dsbufp,
-		      "Bad %s fd in erts_poll()! fd=%d, ",
-		      io_str, (int) state->fd);
+		      "Bad %s fd in erts_poll()! fd=%bpd, ",
+		      io_str, (SWord) state->fd);
         if (state->type == ERTS_EV_TYPE_DRV_SEL) {
             if (is_nil(port)) {
                 ErtsPortNames *ipnp = erts_get_port_names(inport, ERTS_INVALID_ERL_DRV_PORT);
@@ -1978,7 +1981,8 @@ bad_fd_in_pollset(ErtsDrvEventState *state, Eterm inport, Eterm outport)
         }
     }
     else {
-	erts_dsprintf(dsbufp, "Bad fd in erts_poll()! fd=%d\n", (int) state->fd);
+	erts_dsprintf(dsbufp, "Bad fd in erts_poll()! fd=%bpd\n",
+		      (SWord) state->fd);
     }
     erts_send_error_to_logger_nogl(dsbufp);
 
@@ -1997,7 +2001,7 @@ stale_drv_select(Eterm id, ErtsDrvEventState *state, int mode)
 
 static SafeHashValue drv_ev_state_hash(void *des)
 {
-    SafeHashValue val = (SafeHashValue) ((ErtsDrvEventState *) des)->fd;
+    SafeHashValue val = (SafeHashValue)(SWord) ((ErtsDrvEventState *) des)->fd;
     return val ^ (val >> 8);  /* Good enough for aligned pointer values? */
 }
 
@@ -2548,8 +2552,9 @@ static int erts_debug_print_checkio_state(erts_dsprintf_buf_t *dsbufp,
 #ifdef ERTS_SYS_CONTINOUS_FD_NUMBERS
     ErtsPollEvents aio_events = state->active_events;
 #endif
-    erts_dsprintf(dsbufp, "pollset=%d fd=%d ",
-                state->flags & ERTS_EV_FLAG_FALLBACK ? -1 : get_pollset_id(fd), (int) fd);
+    erts_dsprintf(dsbufp, "pollset=%d fd=%bpd ",
+		  state->flags & ERTS_EV_FLAG_FALLBACK ? -1 : get_pollset_id(fd),
+		  (SWord) fd);
 
 #if defined(HAVE_FSTAT) && !defined(NO_FSTAT_ON_SYS_FD_TYPE)
     if (fstat((int) fd, &stat_buf) < 0)
diff --git a/erts/emulator/sys/win32/sys.c b/erts/emulator/sys/win32/sys.c
index 957ade51c3..a9bcc1d0d4 100644
--- a/erts/emulator/sys/win32/sys.c
+++ b/erts/emulator/sys/win32/sys.c
@@ -2111,15 +2111,15 @@ translate_fd(int fd)
 	handle = GetStdHandle(STD_ERROR_HANDLE);
 	break;
     default:
-	return (HANDLE) fd;
+	return (HANDLE)(SWord) fd;
     }
-    DEBUGF(("translate_fd(%d) -> std(%d)\n", fd, handle));
+    DEBUGF(("translate_fd(%d) -> std(%p)\n", fd, (void*)handle));
 
     if (handle == INVALID_HANDLE_VALUE || handle == 0) {
 	handle = CreateFile("nul", access, 0,
 			    NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
     }
-    DEBUGF(("translate_fd(%d) -> %d\n", fd, handle));
+    DEBUGF(("translate_fd(%d) -> %p\n", fd, (void*)handle));
     return handle;
 }
 
@@ -2924,9 +2924,9 @@ unsigned char* sys_preload_begin(Preload* pp)
     ASSERT(beam_module != NULL);
 
     resource = res_name[pp-preloaded];
-    DEBUGF(("Loading name: %s; size: %d; resource: %p\n",
+    DEBUGF(("Loading name: %s; size: %d; resource: %u\n",
 	    pp->name, pp->size, resource));
-    hRes = FindResource(beam_module, (char *) resource, "ERLANG_CODE");
+    hRes = FindResource(beam_module, (char*)(UWord) resource, "ERLANG_CODE");
     return pp->code = LoadResource(beam_module, hRes);
 }
 
diff --git a/erts/etc/common/heart.c b/erts/etc/common/heart.c
index a37bb4cfef..215c152008 100644
--- a/erts/etc/common/heart.c
+++ b/erts/etc/common/heart.c
@@ -977,7 +977,7 @@ debugf(const char *format,...)
 
 #ifdef __WIN32__
 void print_last_error() {
-	LPVOID lpMsgBuf;
+	LPTSTR lpMsgBuf;
 	FormatMessage( 
 		FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
 		NULL,
diff --git a/erts/etc/common/inet_gethost.c b/erts/etc/common/inet_gethost.c
index 4fc7a93348..12012a056e 100644
--- a/erts/etc/common/inet_gethost.c
+++ b/erts/etc/common/inet_gethost.c
@@ -1578,8 +1578,7 @@ static int create_worker(Worker *pworker, int save_que)
 	pworker->que_first = pworker->que_last = NULL;
 	pworker->que_size = 0;
     }
-    DEBUGF(3,("Created worker[%ld] with fd %d", 
-	      (long) pworker->pid, (int) pworker->readfrom));
+    DEBUGF(3,("Created worker[%ld]", (long) pworker->pid));
     return 0;
 }
 
diff --git a/erts/etc/win32/erl_log.c b/erts/etc/win32/erl_log.c
index de0d8e39f0..ed2fb294de 100644
--- a/erts/etc/win32/erl_log.c
+++ b/erts/etc/win32/erl_log.c
@@ -57,7 +57,7 @@ main()
 
 static void print_last_error(char* message)
 {
-    LPTSTR* lpBufPtr;
+    LPTSTR lpBufPtr;
 
     FormatMessage(
 		  FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
diff --git a/erts/etc/win32/erlsrv/erlsrv_interactive.c b/erts/etc/win32/erlsrv/erlsrv_interactive.c
index c616ef86e3..9f1312b5e9 100644
--- a/erts/etc/win32/erlsrv/erlsrv_interactive.c
+++ b/erts/etc/win32/erlsrv/erlsrv_interactive.c
@@ -1273,7 +1273,7 @@ int interactive_main(int argc, wchar_t **argv){
   _setmode(_fileno(stderr), _O_U8TEXT); /* set stderr to UTF8 */
 
   if (take_lock() != 0) {
-    fwprintf(stderr,L"%s: unable to acquire global lock (%s).\n",argv[0],
+    fwprintf(stderr,L"%s: unable to acquire global lock (%S).\n",argv[0],
 	    ERLSRV_INTERACTIVE_GLOBAL_SEMAPHORE);
     return 1;
   }
diff --git a/erts/etc/win32/win_erlexec.c b/erts/etc/win32/win_erlexec.c
index 39dac358e9..c0bb92793e 100644
--- a/erts/etc/win32/win_erlexec.c
+++ b/erts/etc/win32/win_erlexec.c
@@ -272,7 +272,7 @@ start_emulator(char* utf8emu, char *utf8start_prog, char** utf8argv, int start_d
      */
 
     if (start_detached) {
-	int result;
+	HANDLE result;
 	int i;
 	wchar_t *start_prog=NULL;
 	wchar_t **argv;
@@ -311,17 +311,17 @@ start_emulator(char* utf8emu, char *utf8start_prog, char** utf8argv, int start_d
 	    MessageBoxW(NULL, buffer, L"Start detached",MB_OK);
 	}
 #endif
-	result = _wspawnv(_P_DETACH, start_prog, argv);
+	result = (HANDLE) _wspawnv(_P_DETACH, start_prog, argv);
 	free_fnuttified(utf8argv);
 	free(start_prog);
 
-	if (result == -1) {
+	if (result == (HANDLE)-1) {
 #ifdef ARGS_HARDDEBUG
 	    MessageBox(NULL, "_wspawnv failed","Start detached",MB_OK);
 #endif
 	    return 1;
 	}
-	SetPriorityClass((HANDLE) result, GetPriorityClass(GetCurrentProcess()));
+	SetPriorityClass(result, GetPriorityClass(GetCurrentProcess()));
     } else {
 	wchar_t *emu=NULL;
 #ifdef LOAD_BEAM_DYNAMICALLY
-- 
2.26.1

openSUSE Build Service is sponsored by