AC_SUBST([NO_CLOBBERED])
])
+dnl #
+dnl # Check if gcc supports -Wno-cast-function-type option.
+dnl #
+dnl # We actually invoke gcc with the --cast-function-type option
+dnl # and infer the 'no-' version does or doesn't exist based upon
+dnl # the results. This is required because when checking any of
+dnl # no- prefixed options gcc always returns success.
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_CAST_FUNCTION_TYPE], [
+ AC_MSG_CHECKING([whether $CC supports -Wno-cast-function-type])
+
+ saved_flags="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror -Wcast-function-type"
+
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
+ NO_CAST_FUNCTION_TYPE=-Wno-cast-function-type
+ AC_MSG_RESULT([yes])
+ ], [
+ NO_CAST_FUNCTION_TYPE=
+ AC_MSG_RESULT([no])
+ ])
+
+ CFLAGS="$saved_flags"
+ AC_SUBST([NO_CAST_FUNCTION_TYPE])
+])
+
dnl #
dnl # Check if gcc supports -Wimplicit-fallthrough option.
dnl #
AC_SUBST(CPU_COUNT)
ZFS_AC_CONFIG_ALWAYS_CC_NO_CLOBBERED
+ ZFS_AC_CONFIG_ALWAYS_CC_NO_CAST_FUNCTION_TYPE
ZFS_AC_CONFIG_ALWAYS_CC_IMPLICIT_FALLTHROUGH
ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN
ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION
# For the void (*)(void *) -> void *(*)(void *) cast in zk_thread_create()
# See https://github.com/openzfs/zfs/pull/13110#discussion_r808450136
-kernel.$(OBJEXT): CFLAGS += -Wno-cast-function-type
-kernel.l$(OBJEXT): CFLAGS += -Wno-cast-function-type
+kernel.$(OBJEXT): CFLAGS += $(NO_CAST_FUNCTION_TYPE)
+kernel.l$(OBJEXT): CFLAGS += $(NO_CAST_FUNCTION_TYPE)
lib_LTLIBRARIES = libzpool.la