aboutsummaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
Diffstat (limited to 'config')
-rw-r--r--config/Rules.am1
-rw-r--r--config/always-compiler-options.m423
-rw-r--r--config/zfs-build.m41
3 files changed, 25 insertions, 0 deletions
diff --git a/config/Rules.am b/config/Rules.am
index be80c1e9c..20779ba49 100644
--- a/config/Rules.am
+++ b/config/Rules.am
@@ -26,6 +26,7 @@ AM_LIBTOOLFLAGS = --silent
AM_CFLAGS = -std=gnu99 -Wall -Wstrict-prototypes -Wmissing-prototypes
AM_CFLAGS += -fno-strict-aliasing
AM_CFLAGS += $(NO_OMIT_FRAME_POINTER)
+AM_CFLAGS += $(IMPLICIT_FALLTHROUGH)
AM_CFLAGS += $(DEBUG_CFLAGS)
AM_CFLAGS += $(ASAN_CFLAGS)
AM_CFLAGS += $(CODE_COVERAGE_CFLAGS) $(NO_FORMAT_ZERO_LENGTH)
diff --git a/config/always-compiler-options.m4 b/config/always-compiler-options.m4
index a84123317..ce84f7e60 100644
--- a/config/always-compiler-options.m4
+++ b/config/always-compiler-options.m4
@@ -162,6 +162,29 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_UNUSED_BUT_SET_VARIABLE], [
])
dnl #
+dnl # Check if gcc supports -Wimplicit-fallthrough option.
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_IMPLICIT_FALLTHROUGH], [
+ AC_MSG_CHECKING([whether $CC supports -Wimplicit-fallthrough])
+
+ saved_flags="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror -Wimplicit-fallthrough"
+
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
+ IMPLICIT_FALLTHROUGH=-Wimplicit-fallthrough
+ AC_DEFINE([HAVE_IMPLICIT_FALLTHROUGH], 1,
+ [Define if compiler supports -Wimplicit-fallthrough])
+ AC_MSG_RESULT([yes])
+ ], [
+ IMPLICIT_FALLTHROUGH=
+ AC_MSG_RESULT([no])
+ ])
+
+ CFLAGS="$saved_flags"
+ AC_SUBST([IMPLICIT_FALLTHROUGH])
+])
+
+dnl #
dnl # Check if gcc supports -fno-omit-frame-pointer option.
dnl #
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_OMIT_FRAME_POINTER], [
diff --git a/config/zfs-build.m4 b/config/zfs-build.m4
index 1af4356cd..27041c054 100644
--- a/config/zfs-build.m4
+++ b/config/zfs-build.m4
@@ -211,6 +211,7 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [
ZFS_AC_CONFIG_ALWAYS_CC_NO_UNUSED_BUT_SET_VARIABLE
ZFS_AC_CONFIG_ALWAYS_CC_NO_BOOL_COMPARE
+ ZFS_AC_CONFIG_ALWAYS_CC_IMPLICIT_FALLTHROUGH
ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN
ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION
ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_ZERO_LENGTH