From 1ea68b6d38d8e20e53e813b6a9d5d68f4c7cd838 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= Date: Fri, 25 Feb 2022 17:49:29 +0000 Subject: [PATCH] config: check for -Wno-cast-function-type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Brian Behlendorf Reviewed-by: Rich Ercolani Signed-off-by: Ahelenia ZiemiaƄska Closes #13145 Closes #13152 --- config/always-compiler-options.m4 | 26 ++++++++++++++++++++++++++ config/zfs-build.m4 | 1 + lib/libzpool/Makefile.am | 4 ++-- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/config/always-compiler-options.m4 b/config/always-compiler-options.m4 index bf96313d90..c0f6e076dc 100644 --- a/config/always-compiler-options.m4 +++ b/config/always-compiler-options.m4 @@ -181,6 +181,32 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_CLOBBERED], [ 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 # diff --git a/config/zfs-build.m4 b/config/zfs-build.m4 index d516f3d296..42e57cdf7a 100644 --- a/config/zfs-build.m4 +++ b/config/zfs-build.m4 @@ -210,6 +210,7 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [ 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 diff --git a/lib/libzpool/Makefile.am b/lib/libzpool/Makefile.am index 3942ff3b6d..60ffbb7ee5 100644 --- a/lib/libzpool/Makefile.am +++ b/lib/libzpool/Makefile.am @@ -26,8 +26,8 @@ AM_CFLAGS += -DLIB_ZPOOL_BUILD # 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