diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c
index ff23c5e..75980ff 100644
--- a/src/events/SDL_mouse.c
+++ b/src/events/SDL_mouse.c
@@ -545,7 +545,7 @@
         SDL_SetMouseFocus(window);
     }
 
-    if (!x && !y) {
+    if (x == 0. && y == 0.) {
         return 0;
     }
 
diff --git a/src/events/SDL_touch.c b/src/events/SDL_touch.c
index bed2c49..2c175ab 100644
--- a/src/events/SDL_touch.c
+++ b/src/events/SDL_touch.c
@@ -315,7 +315,7 @@
     prel = pressure - finger->pressure;
 
     /* Drop events that don't change state */
-    if (!xrel && !yrel && !prel) {
+    if (xrel == 0. && yrel == 0. && prel == 0.) {
 #if 0
         printf("Touch event didn't change state - dropped!\n");
 #endif
diff --git a/src/haptic/SDL_haptic.c b/src/haptic/SDL_haptic.c
index f23ba18..2f4c57b 100644
--- a/src/haptic/SDL_haptic.c
+++ b/src/haptic/SDL_haptic.c
@@ -26,7 +26,11 @@
 #include "SDL_assert.h"
 
 /* Global for SDL_windowshaptic.c */
+#if (defined(SDL_HAPTIC_DINPUT) && SDL_HAPTIC_DINPUT) || (defined(SDL_HAPTIC_XINPUT) && SDL_HAPTIC_XINPUT)
 SDL_Haptic *SDL_haptics = NULL;
+#else 
+static SDL_Haptic *SDL_haptics = NULL;
+#endif
 
 /*
  * Initializes the Haptic devices.
diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c
index 2d08725..1344453 100644
--- a/src/render/SDL_render.c
+++ b/src/render/SDL_render.c
@@ -2415,8 +2415,8 @@
 
     for (i = 0; i < count-1; ++i) {
         if (points[i].x == points[i+1].x) {
-            const int minY = SDL_min(points[i].y, points[i+1].y);
-            const int maxY = SDL_max(points[i].y, points[i+1].y);
+            const int minY = (int)SDL_min(points[i].y, points[i+1].y);
+            const int maxY = (int)SDL_max(points[i].y, points[i+1].y);
 
             frect = &frects[nrects++];
             frect->x = points[i].x * renderer->scale.x;
@@ -2424,8 +2424,8 @@
             frect->w = renderer->scale.x;
             frect->h = (maxY - minY + 1) * renderer->scale.y;
         } else if (points[i].y == points[i+1].y) {
-            const int minX = SDL_min(points[i].x, points[i+1].x);
-            const int maxX = SDL_max(points[i].x, points[i+1].x);
+            const int minX = (int)SDL_min(points[i].x, points[i+1].x);
+            const int maxX = (int)SDL_max(points[i].x, points[i+1].x);
 
             frect = &frects[nrects++];
             frect->x = minX * renderer->scale.x;
diff --git a/src/test/SDL_test_common.c b/src/test/SDL_test_common.c
index 81dd39e..81ec342 100644
--- a/src/test/SDL_test_common.c
+++ b/src/test/SDL_test_common.c
@@ -999,7 +999,7 @@
                 }
                 if (state->logical_w && state->logical_h) {
                     SDL_RenderSetLogicalSize(state->renderers[i], state->logical_w, state->logical_h);
-                } else if (state->scale) {
+                } else if (state->scale != 0.) {
                     SDL_RenderSetScale(state->renderers[i], state->scale, state->scale);
                 }
                 if (state->verbose & VERBOSE_RENDER) {
diff --git a/src/thread/pthread/SDL_systhread.c b/src/thread/pthread/SDL_systhread.c
index bf655ca..dba7df9 100644
--- a/src/thread/pthread/SDL_systhread.c
+++ b/src/thread/pthread/SDL_systhread.c
@@ -50,7 +50,6 @@
 #include "SDL_log.h"
 #include "SDL_platform.h"
 #include "SDL_thread.h"
-#include "SDL_system.h"
 #include "../SDL_thread_c.h"
 #include "../SDL_systhread.h"
 #ifdef __ANDROID__
diff --git a/src/video/SDL_RLEaccel.c b/src/video/SDL_RLEaccel.c
index 661cb1f..3fe16b3 100644
--- a/src/video/SDL_RLEaccel.c
+++ b/src/video/SDL_RLEaccel.c
@@ -1510,8 +1510,9 @@
             if (run) {
                 srcbuf += uncopy_opaque(dst + ofs, srcbuf, run, df, sf);
                 ofs += run;
-            } else if (!ofs)
-                return (SDL_TRUE);
+            } else if (!ofs) {
+                goto end_function;
+            }
         } while (ofs < w);
 
         /* skip padding if needed */
@@ -1532,7 +1533,8 @@
         } while (ofs < w);
         dst += surface->pitch >> 2;
     }
-    /* Make the compiler happy */
+
+end_function:
     return (SDL_TRUE);
 }
 
diff --git a/src/video/android/SDL_androidmouse.c b/src/video/android/SDL_androidmouse.c
index 037b453..a666728 100644
--- a/src/video/android/SDL_androidmouse.c
+++ b/src/video/android/SDL_androidmouse.c
@@ -234,7 +234,7 @@
             changes = state & ~last_state;
             button = TranslateButton(changes);
             last_state = state;
-            SDL_SendMouseMotion(Android_Window, 0, relative, x, y);
+            SDL_SendMouseMotion(Android_Window, 0, relative, (int)x, (int)y);
             SDL_SendMouseButton(Android_Window, 0, SDL_PRESSED, button);
             break;
 
@@ -242,13 +242,13 @@
             changes = last_state & ~state;
             button = TranslateButton(changes);
             last_state = state;
-            SDL_SendMouseMotion(Android_Window, 0, relative, x, y);
+            SDL_SendMouseMotion(Android_Window, 0, relative, (int)x, (int)y);
             SDL_SendMouseButton(Android_Window, 0, SDL_RELEASED, button);
             break;
 
         case ACTION_MOVE:
         case ACTION_HOVER_MOVE:
-            SDL_SendMouseMotion(Android_Window, 0, relative, x, y);
+            SDL_SendMouseMotion(Android_Window, 0, relative, (int)x, (int)y);
             break;
 
         case ACTION_SCROLL:
diff --git a/src/video/android/SDL_androidvideo.c b/src/video/android/SDL_androidvideo.c
index 589461a..852bb36 100644
--- a/src/video/android/SDL_androidvideo.c
+++ b/src/video/android/SDL_androidvideo.c
@@ -64,7 +64,7 @@
 int Android_SurfaceHeight = 0;
 int Android_DeviceWidth = 0;
 int Android_DeviceHeight = 0;
-Uint32 Android_ScreenFormat = SDL_PIXELFORMAT_UNKNOWN;
+static Uint32 Android_ScreenFormat = SDL_PIXELFORMAT_UNKNOWN;
 static int Android_ScreenRate = 0;
 
 SDL_sem *Android_PauseSem = NULL, *Android_ResumeSem = NULL;
@@ -221,7 +221,7 @@
     Android_DeviceWidth = deviceWidth;
     Android_DeviceHeight = deviceHeight;
     Android_ScreenFormat = format;
-    Android_ScreenRate = rate;
+    Android_ScreenRate = (int)rate;
 
     /*
       Update the resolution of the desktop mode, so that the window
@@ -247,7 +247,7 @@
         display->display_modes[0].format = format;
         display->display_modes[0].w = Android_DeviceWidth;
         display->display_modes[0].h = Android_DeviceHeight;
-        display->display_modes[0].refresh_rate = rate;
+        display->display_modes[0].refresh_rate = (int)rate;
         display->current_mode = display->display_modes[0];
 
         SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_RESIZED, surfaceWidth, surfaceHeight);
diff --git a/src/video/android/SDL_androidvideo.h b/src/video/android/SDL_androidvideo.h
index 6dce7ed..ad07cd0 100644
--- a/src/video/android/SDL_androidvideo.h
+++ b/src/video/android/SDL_androidvideo.h
@@ -41,7 +41,6 @@
 extern int Android_SurfaceHeight;
 extern int Android_DeviceWidth;
 extern int Android_DeviceHeight;
-extern Uint32 Android_ScreenFormat;
 extern SDL_sem *Android_PauseSem, *Android_ResumeSem;
 extern SDL_Window *Android_Window;
 
