diff -Naur Python-3.8.0-orig/Modules/_winapi.c Python-3.8.0/Modules/_winapi.c
--- Python-3.8.0-orig/Modules/_winapi.c	2019-10-22 10:01:51.434032500 +0300
+++ Python-3.8.0/Modules/_winapi.c	2019-10-22 10:05:34.654824500 +0300
@@ -951,7 +951,7 @@
     DWORD err;
     BOOL result;
     PyObject *value;
-    Py_ssize_t handle_list_size;
+    Py_ssize_t handle_list_size = 0;
     DWORD attribute_count = 0;
     SIZE_T attribute_list_size = 0;
 
diff -Naur Python-3.8.0-orig/Modules/posixmodule.c Python-3.8.0/Modules/posixmodule.c
--- Python-3.8.0-orig/Modules/posixmodule.c	2019-10-22 10:04:46.029539100 +0300
+++ Python-3.8.0/Modules/posixmodule.c	2019-10-22 10:05:35.076025300 +0300
@@ -4804,7 +4804,7 @@
 /*[clinic end generated code: output=cfcac69d027b82cf input=2fbd62a2f228f8f4]*/
 {
 #ifdef MS_WINDOWS
-    HANDLE hFile;
+    HANDLE hFile = 0;
     FILETIME atime, mtime;
 #else
     int result;
@@ -12225,7 +12225,9 @@
     int ncpu = 0;
 #ifdef MS_WINDOWS
     /* Declare prototype here to avoid pulling in all of the Win7 APIs in 3.8 */
+#if defined (_WIN32_WINNT) && (_WIN32_WINNT < 0x601)
     DWORD WINAPI GetActiveProcessorCount(WORD group);
+#endif
     ncpu = GetActiveProcessorCount(ALL_PROCESSOR_GROUPS);
 #elif defined(__hpux)
     ncpu = mpctl(MPC_GETNUMSPUS, NULL, NULL);
@@ -13489,7 +13491,7 @@
        loaded. */
     Py_BEGIN_ALLOW_THREADS
     if (!(hKernel32 = GetModuleHandleW(L"kernel32")) ||
-        !(AddDllDirectory = (PAddDllDirectory)GetProcAddress(
+        !(AddDllDirectory = (PAddDllDirectory)(void *)GetProcAddress(
             hKernel32, "AddDllDirectory")) ||
         !(cookie = (*AddDllDirectory)(path->wide))) {
         err = GetLastError();
@@ -13539,7 +13541,7 @@
        loaded. */
     Py_BEGIN_ALLOW_THREADS
     if (!(hKernel32 = GetModuleHandleW(L"kernel32")) ||
-        !(RemoveDllDirectory = (PRemoveDllDirectory)GetProcAddress(
+        !(RemoveDllDirectory = (PRemoveDllDirectory)(void *)GetProcAddress(
             hKernel32, "RemoveDllDirectory")) ||
         !(*RemoveDllDirectory)(cookieValue)) {
         err = GetLastError();
diff -Naur Python-3.8.0-orig/Modules/socketmodule.h Python-3.8.0/Modules/socketmodule.h
--- Python-3.8.0-orig/Modules/socketmodule.h	2019-10-14 16:34:47.000000000 +0300
+++ Python-3.8.0/Modules/socketmodule.h	2019-10-22 10:05:35.466026000 +0300
@@ -29,8 +29,10 @@
  */
 # ifdef SIO_GET_MULTICAST_FILTER
 #  include <mstcpip.h> /* for SIO_RCVALL */
+#ifndef __MINGW32__ /* resolve by configure */
 #  define HAVE_ADDRINFO
 #  define HAVE_SOCKADDR_STORAGE
+#endif
 #  define HAVE_GETADDRINFO
 #  define HAVE_GETNAMEINFO
 #  define ENABLE_IPV6
diff -Naur Python-3.8.0-orig/PC/python_exe.rc Python-3.8.0/PC/python_exe.rc
--- Python-3.8.0-orig/PC/python_exe.rc	2019-10-14 16:34:47.000000000 +0300
+++ Python-3.8.0/PC/python_exe.rc	2019-10-22 10:05:35.871626700 +0300
@@ -7,7 +7,7 @@
 #include <winuser.h>
 1 RT_MANIFEST "python.manifest"
 
-1 ICON DISCARDABLE "icons\python.ico" 
+1 ICON DISCARDABLE "icons/python.ico"
 
 
 /////////////////////////////////////////////////////////////////////////////
diff -Naur Python-3.8.0-orig/PC/pythonw_exe.rc Python-3.8.0/PC/pythonw_exe.rc
--- Python-3.8.0-orig/PC/pythonw_exe.rc	2019-10-14 16:34:47.000000000 +0300
+++ Python-3.8.0/PC/pythonw_exe.rc	2019-10-22 10:05:36.277227400 +0300
@@ -7,7 +7,7 @@
 #include <winuser.h>
 1 RT_MANIFEST "python.manifest"
 
-1 ICON DISCARDABLE "icons\pythonw.ico" 
+1 ICON DISCARDABLE "icons/pythonw.ico"
 
 
 /////////////////////////////////////////////////////////////////////////////
diff -Naur Python-3.8.0-orig/PC/winreg.c Python-3.8.0/PC/winreg.c
--- Python-3.8.0-orig/PC/winreg.c	2019-10-22 10:01:02.698546800 +0300
+++ Python-3.8.0/PC/winreg.c	2019-10-22 10:05:36.682828100 +0300
@@ -800,6 +800,7 @@
         case REG_BINARY:
         /* ALSO handle ALL unknown data types here.  Even if we can't
            support it natively, we should handle the bits. */
+           /* fallthrough */
         default:
             if (retDataSize == 0) {
                 Py_INCREF(Py_None);
diff -Naur Python-3.8.0-orig/Python/thread_nt.h Python-3.8.0/Python/thread_nt.h
--- Python-3.8.0-orig/Python/thread_nt.h	2019-10-14 16:34:47.000000000 +0300
+++ Python-3.8.0/Python/thread_nt.h	2019-10-22 10:05:37.088428800 +0300
@@ -342,8 +342,9 @@
 {
     dprintf(("%lu: PyThread_release_lock(%p) called\n", PyThread_get_thread_ident(),aLock));
 
-    if (!(aLock && LeaveNonRecursiveMutex((PNRMUTEX) aLock)))
+    if (!(aLock && LeaveNonRecursiveMutex((PNRMUTEX) aLock))) {
         dprintf(("%lu: Could not PyThread_release_lock(%p) error: %ld\n", PyThread_get_thread_ident(), aLock, GetLastError()));
+    }
 }
 
 /* minimum/maximum thread stack sizes supported */
