From: Arran Cudbard-Bell Date: Tue, 27 Mar 2018 11:22:26 +0000 (+0100) Subject: Ensure -Wimplicit-fallthrough is enabled X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8fc1e9ed731730ea1390941bfb2872fbe140ffd4;p=thirdparty%2Ffreeradius-server.git Ensure -Wimplicit-fallthrough is enabled --- diff --git a/configure b/configure index ad231e0860c..945bc384026 100755 --- a/configure +++ b/configure @@ -2471,6 +2471,8 @@ ac_config_headers="$ac_config_headers src/include/autoconf.h" + + @@ -12625,6 +12627,57 @@ $as_echo "$ax_cv_cc_weverything_flag" >&6; } fi fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the compiler flag \"-Wimplicit-fallthrough\"" >&5 +$as_echo_n "checking for the compiler flag \"-Wimplicit-fallthrough\"... " >&6; } +if ${ax_cv_cc_wimplicit_fallthrough_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + CFLAGS_SAVED=$CFLAGS + CFLAGS="$CFLAGS -Werror -Wimplicit-fallthrough" + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ax_cv_cc_wimplicit_fallthrough_flag="yes" +else + ax_cv_cc_wimplicit_fallthrough_flag="no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + CFLAGS="$CFLAGS_SAVED" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cc_wimplicit_fallthrough_flag" >&5 +$as_echo "$ax_cv_cc_wimplicit_fallthrough_flag" >&6; } + + if test "x$ax_cv_cc_wimplicit_fallthrough_flag" = "xyes"; then + devcflags="$devcflags -Wimplicit-fallthrough" + fi + if test "x$llvm_address_sanitizer" = "xyes" && test "x$ax_cv_cc_clang" = "xyes"; then devcflags="$devcflags -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls" diff --git a/configure.ac b/configure.ac index 4cf8360442c..90fdd1b9465 100644 --- a/configure.ac +++ b/configure.ac @@ -1611,6 +1611,14 @@ if test "x$developer" = "xyes"; then fi fi + dnl # + dnl # Older versions of GCC don't support this, but 7 seems to + dnl # + AX_CC_IMPLICIT_FALLTHROUGH_FLAG + if test "x$ax_cv_cc_wimplicit_fallthrough_flag" = "xyes"; then + devcflags="$devcflags -Wimplicit-fallthrough" + fi + dnl # dnl # If running with clang, add in ASAN dnl # diff --git a/m4/ax_cc.m4 b/m4/ax_cc.m4 index e77878f6f25..816ed77c21a 100644 --- a/m4/ax_cc.m4 +++ b/m4/ax_cc.m4 @@ -106,7 +106,7 @@ AC_DEFUN([AX_CC_NO_UNKNOWN_WARNING_OPTION_FLAG],[ CFLAGS_SAVED=$CFLAGS CFLAGS="-Werror -Wno-unknown-warning-option" - + AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([], [[ /* @@ -115,14 +115,14 @@ AC_DEFUN([AX_CC_NO_UNKNOWN_WARNING_OPTION_FLAG],[ */ #if defined(__GNUC__) && !defined(__clang__) gcc sucks - #endif - + #endif + return 0; ]])], [ax_cv_cc_no_unknown_warning_option_flag=yes], [ax_cv_cc_no_unknown_warning_option_flag=no]) - CFLAGS="$CFLAGS_SAVED" + CFLAGS="$CFLAGS_SAVED" ]) ]) @@ -164,6 +164,24 @@ AC_DEFUN([AX_CC_WDOCUMENTATION_FLAG],[ ]) ]) +AC_DEFUN([AX_CC_IMPLICIT_FALLTHROUGH_FLAG],[ + AC_CACHE_CHECK([for the compiler flag "-Wimplicit-fallthrough"], [ax_cv_cc_wimplicit_fallthrough_flag],[ + + CFLAGS_SAVED=$CFLAGS + CFLAGS="$CFLAGS -Werror -Wimplicit-fallthrough" + + AC_LANG_PUSH(C) + AC_TRY_COMPILE( + [], + [return 0;], + [ax_cv_cc_wimplicit_fallthrough_flag="yes"], + [ax_cv_cc_wimplicit_fallthrough_flag="no"]) + AC_LANG_POP + + CFLAGS="$CFLAGS_SAVED" + ]) +]) + AC_DEFUN([AX_CC_NO_DATE_TIME_FLAG],[ AC_CACHE_CHECK([for the compiler flag "-Wno-date-time"], [ax_cv_cc_no_date_time_flag],[