--- blender-2.80/extern/audaspace/src/plugin/PluginManagerWindows.cpp.in.orig	2019-08-01 21:42:50.026016500 +0300
+++ blender-2.80/extern/audaspace/src/plugin/PluginManagerWindows.cpp.in	2019-08-01 21:43:11.476046500 +0300
@@ -29,7 +29,7 @@
 
 void *PluginManager::lookupLibrary(void *handle, const std::string &name)
 {
-	return GetProcAddress(reinterpret_cast<HMODULE>(handle), name.c_str());
+	return reinterpret_cast<void*>(GetProcAddress(reinterpret_cast<HMODULE>(handle), name.c_str()));
 }
 
 void PluginManager::closeLibrary(void *handle)
diff -Naur blender-2.78-orig/source/blender/blenlib/intern/math_base.c blender-2.78/source/blender/blenlib/intern/math_base.c
--- blender-2.78-orig/source/blender/blenlib/intern/math_base.c	2016-09-28 12:26:55.000000000 +0300
+++ blender-2.78/source/blender/blenlib/intern/math_base.c	2016-10-14 13:53:56.430617800 +0300
@@ -53,7 +53,7 @@
     pow2 = 1.0;
     y = (x * pow1) * pow2;
     /* if y overflows, then rounded value is exactly x */
-    if (!isfinite(y)) {
+    if (!isfinite((float)y)) {
       return x;
     }
   }
diff -Naur blender-2.78-orig/source/blender/blenlib/intern/math_geom.c blender-2.78/source/blender/blenlib/intern/math_geom.c
--- blender-2.78-orig/source/blender/blenlib/intern/math_geom.c	2016-09-28 12:26:55.000000000 +0300
+++ blender-2.78/source/blender/blenlib/intern/math_geom.c	2016-10-14 13:53:56.430617800 +0300
@@ -4296,7 +4296,7 @@
     const double dot = dot_v2v2_db(d_curr->dir, d_next->dir);
     const double len = d_curr->len * d_next->len;
     const double result = (len - dot) / area;
-    if (isfinite(result)) {
+    if (isfinite((float)result)) {
       return result;
     }
   }
diff -Naur blender-2.92.0-orig/source/blender/blenlib/intern/string_utf8.c blender-2.92.0/source/blender/blenlib/intern/string_utf8.c
--- blender-2.92.0-orig/source/blender/blenlib/intern/string_utf8.c	2021-03-28 12:26:55.000000000 +0300
+++ blender-2.92.0/source/blender/blenlib/intern/string_utf8.c	2021-03-14 13:53:56.430617800 +0300
@@ -396,7 +396,7 @@
                                    const size_t maxncpy)
 {
 #ifdef WIN32
-  return conv_utf_8_to_16(src_c, dst_w, maxncpy);
+  return (size_t)conv_utf_8_to_16(src_c, dst_w, maxncpy);
 #else
   return BLI_str_utf8_as_utf32((char32_t *)dst_w, src_c, maxncpy);
 #endif
