Browse Source

Temporary fix for bug 4254 - a _lot_ of strict aliasing warnings

Ozkan Sezer

A horde of strict aliasing violation warnings are emitted from joystick
layer, and also from a few other places. This happens with gcc-4.4.7 on
Linux CentOS 6.10.  Some other sysjoystick would possibly have the same
warnings.

Attached my full log here. Example entry:
src/joystick/SDL_joystick.c: In function 'SDL_GetJoystickGUIDInfo':
src/joystick/SDL_joystick.c:1094: warning: dereferencing pointer '({anonymous})' does break strict-aliasing rules
Sam Lantinga 6 years ago
parent
commit
1b73d578f3
3 changed files with 68 additions and 1 deletions
  1. 5 0
      CMakeLists.txt
  2. 39 1
      configure
  3. 24 0
      configure.ac

+ 5 - 0
CMakeLists.txt

@@ -418,6 +418,11 @@ if(USE_GCC OR USE_CLANG)
     endif()
     endif()
   endif()
   endif()
 
 
+  check_c_compiler_flag(-fno-strict-aliasing HAVE_GCC_NO_STRICT_ALIASING)
+  if(HAVE_GCC_NO_STRICT_ALIASING)
+    list(APPEND EXTRA_CFLAGS "-fno-strict-aliasing")
+  endif()
+
   check_c_compiler_flag(-Wdeclaration-after-statement HAVE_GCC_WDECLARATION_AFTER_STATEMENT)
   check_c_compiler_flag(-Wdeclaration-after-statement HAVE_GCC_WDECLARATION_AFTER_STATEMENT)
   if(HAVE_GCC_WDECLARATION_AFTER_STATEMENT)
   if(HAVE_GCC_WDECLARATION_AFTER_STATEMENT)
     check_c_compiler_flag(-Werror=declaration-after-statement HAVE_GCC_WERROR_DECLARATION_AFTER_STATEMENT)
     check_c_compiler_flag(-Werror=declaration-after-statement HAVE_GCC_WERROR_DECLARATION_AFTER_STATEMENT)

+ 39 - 1
configure

@@ -19396,6 +19396,43 @@ $as_echo "$have_gcc_fvisibility" >&6; }
     fi
     fi
 }
 }
 
 
+CheckNoStrictAliasing()
+{
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GCC -fno-strict-aliasing option" >&5
+$as_echo_n "checking for GCC -fno-strict-aliasing option... " >&6; }
+    have_gcc_no_strict_aliasing=no
+
+    save_CFLAGS="$CFLAGS"
+    CFLAGS="$save_CFLAGS -fno-strict-aliasing"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+    int x = 0;
+
+int
+main ()
+{
+
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+    have_gcc_no_strict_aliasing=yes
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gcc_no_strict_aliasing" >&5
+$as_echo "$have_gcc_no_strict_aliasing" >&6; }
+    CFLAGS="$save_CFLAGS"
+
+    if test x$have_gcc_no_strict_aliasing = xyes; then
+        EXTRA_CFLAGS="$EXTRA_CFLAGS -fno-strict-aliasing"
+    fi
+}
+
 CheckStackBoundary()
 CheckStackBoundary()
 {
 {
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GCC -mpreferred-stack-boundary option" >&5
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GCC -mpreferred-stack-boundary option" >&5
@@ -24334,6 +24371,7 @@ fi
 
 
 
 
 CheckWarnAll
 CheckWarnAll
+CheckNoStrictAliasing
 
 
 CheckEventSignals
 CheckEventSignals
 
 
@@ -24402,8 +24440,8 @@ case "$host" in
         CheckOpenGLESX11
         CheckOpenGLESX11
         CheckVulkan
         CheckVulkan
         CheckWayland
         CheckWayland
-        CheckLibUDev
         CheckInputEvents
         CheckInputEvents
+        CheckLibUDev
         CheckDBus
         CheckDBus
         CheckIME
         CheckIME
         CheckIBus
         CheckIBus

+ 24 - 0
configure.ac

@@ -1329,6 +1329,29 @@ CheckVisibilityHidden()
     fi
     fi
 }
 }
 
 
+dnl See if GCC's -fno-strict-aliasingis supported.
+dnl  Reference: https://bugzilla.libsdl.org/show_bug.cgi?id=4254
+CheckNoStrictAliasing()
+{
+    AC_MSG_CHECKING(for GCC -fno-strict-aliasing option)
+    have_gcc_no_strict_aliasing=no
+
+    save_CFLAGS="$CFLAGS"
+    CFLAGS="$save_CFLAGS -fno-strict-aliasing"
+    AC_TRY_COMPILE([
+    int x = 0;
+    ],[
+    ],[
+    have_gcc_no_strict_aliasing=yes
+    ])
+    AC_MSG_RESULT($have_gcc_no_strict_aliasing)
+    CFLAGS="$save_CFLAGS"
+
+    if test x$have_gcc_no_strict_aliasing = xyes; then
+        EXTRA_CFLAGS="$EXTRA_CFLAGS -fno-strict-aliasing"
+    fi
+}
+
 dnl See if GCC's -mpreferred-stack-boundary is supported.
 dnl See if GCC's -mpreferred-stack-boundary is supported.
 dnl  Reference: http://bugzilla.libsdl.org/show_bug.cgi?id=1296
 dnl  Reference: http://bugzilla.libsdl.org/show_bug.cgi?id=1296
 CheckStackBoundary()
 CheckStackBoundary()
@@ -3263,6 +3286,7 @@ AS_HELP_STRING([--enable-foregrounding-signal], [number to use for magic foregro
 
 
 dnl Do this on all platforms, before everything else (other things might want to override it).
 dnl Do this on all platforms, before everything else (other things might want to override it).
 CheckWarnAll
 CheckWarnAll
+CheckNoStrictAliasing
 
 
 dnl Do this for every platform, but for some it doesn't mean anything, but better to catch it here anyhow.
 dnl Do this for every platform, but for some it doesn't mean anything, but better to catch it here anyhow.
 CheckEventSignals
 CheckEventSignals