build: Check for -Wimplicit-fallthrough=5 separately

GCC accepts the =5, which means it doesn't try to parse any comments
and only accepts the fallthrough attribute in code. Clang does not ever
parse any comments and always wants the fallthrough attribute anyway.
Clang also doesn't accept the =n parameter for -Wimplicit-fallthrough.

Test for =5 separately and use it if supported and fall back to just
-Wimplicit-fallthrough otherwise.

Signed-off-by: Timm Bäder <tbaeder@redhat.com>
This commit is contained in:
Timm Bäder
2021-02-17 10:27:06 +01:00
committed by Mark Wielaard
parent 5e77688768
commit d6c85cff9d
2 changed files with 16 additions and 0 deletions
+4
View File
@@ -64,8 +64,12 @@ endif
if HAVE_IMPLICIT_FALLTHROUGH_WARNING
# Use strict fallthrough. Only __attribute__((fallthrough)) will prevent the
# warning
if HAVE_IMPLICIT_FALLTHROUGH_5_WARNING
IMPLICIT_FALLTHROUGH_WARNING=-Wimplicit-fallthrough=5
else
IMPLICIT_FALLTHROUGH_WARNING=-Wimplicit-fallthrough
endif
else
IMPLICIT_FALLTHROUGH_WARNING=
endif
+12
View File
@@ -519,6 +519,18 @@ CFLAGS="$old_CFLAGS"])
AM_CONDITIONAL(HAVE_IMPLICIT_FALLTHROUGH_WARNING,
[test "x$ac_cv_implicit_fallthrough" != "xno"])
# Check whether the compiler additionally accepts -Wimplicit-fallthrough=5
# GCC accepts this and 5 means "don't parse any fallthrough comments and
# only accept the fallthrough attribute"
AC_CACHE_CHECK([whether the compiler accepts -Wimplicit-fallthrough=5], ac_cv_implicit_fallthrough_5, [dnl
old_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Wimplicit-fallthrough=5 -Werror"
AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
ac_cv_implicit_fallthrough_5=yes, ac_cv_implicit_fallthrough_5=no)
CFLAGS="$old_CFLAGS"])
AM_CONDITIONAL(HAVE_IMPLICIT_FALLTHROUGH_5_WARNING,
[test "x$ac_cv_implicit_fallthrough_5" != "xno"])
# Assume the fallthrough attribute is supported if -Wimplict-fallthrough is supported
if test "$ac_cv_implicit_fallthrough" = "yes"; then
AC_DEFINE([HAVE_FALLTHROUGH], [1],