Skip to content

Commit

Permalink
Temporary fix for bug 4254 - a _lot_ of strict aliasing warnings
Browse files Browse the repository at this point in the history
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
  • Loading branch information
slouken committed Jun 9, 2019
1 parent 3176524 commit 1b73d57
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 1 deletion.
5 changes: 5 additions & 0 deletions CMakeLists.txt
Expand Up @@ -418,6 +418,11 @@ if(USE_GCC OR USE_CLANG)
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)
if(HAVE_GCC_WDECLARATION_AFTER_STATEMENT)
check_c_compiler_flag(-Werror=declaration-after-statement HAVE_GCC_WERROR_DECLARATION_AFTER_STATEMENT)
Expand Down
40 changes: 39 additions & 1 deletion configure
Expand Up @@ -19396,6 +19396,43 @@ $as_echo "$have_gcc_fvisibility" >&6; }
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()
{
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GCC -mpreferred-stack-boundary option" >&5
Expand Down Expand Up @@ -24334,6 +24371,7 @@ fi


CheckWarnAll
CheckNoStrictAliasing

CheckEventSignals

Expand Down Expand Up @@ -24402,8 +24440,8 @@ case "$host" in
CheckOpenGLESX11
CheckVulkan
CheckWayland
CheckLibUDev
CheckInputEvents
CheckLibUDev
CheckDBus
CheckIME
CheckIBus
Expand Down
24 changes: 24 additions & 0 deletions configure.ac
Expand Up @@ -1329,6 +1329,29 @@ CheckVisibilityHidden()
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 Reference: http://bugzilla.libsdl.org/show_bug.cgi?id=1296
CheckStackBoundary()
Expand Down Expand Up @@ -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).
CheckWarnAll
CheckNoStrictAliasing

dnl Do this for every platform, but for some it doesn't mean anything, but better to catch it here anyhow.
CheckEventSignals
Expand Down

0 comments on commit 1b73d57

Please sign in to comment.