]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Fix Clang 15 compilation errors
authorszubersk <szuberskidamian@gmail.com>
Wed, 30 Nov 2022 10:27:28 +0000 (20:27 +1000)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 30 Nov 2022 21:46:26 +0000 (13:46 -0800)
- Clang 15 doesn't support `-fno-ipa-sra` anymore. Do a separate
  check for `-fno-ipa-sra` support by $KERNEL_CC.

- Don't enable `-mgeneral-regs-only` for certain module files.
  Fix #13260

- Scope `GCC diagnostic ignored` statements to GCC only. Clang
  doesn't need them to compile the code.

Reviewed-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: szubersk <szuberskidamian@gmail.com>
Closes #13260
Closes #14150

config/always-compiler-options.m4
config/zfs-build.m4
module/Kbuild.in
module/icp/algs/edonr/edonr.c
module/icp/algs/skein/skein_block.c
module/lua/ldo.c
module/os/linux/spl/spl-generic.c
module/zfs/vdev_raidz_math_aarch64_neonx2.c

index 1e7ec3db9f631fda61f3bde550bedf015c0b0a10..6383b12506ee992b998bfc3592820c995abd3f23 100644 (file)
@@ -324,3 +324,34 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_IPA_SRA], [
        CFLAGS="$saved_flags"
        AC_SUBST([NO_IPA_SRA])
 ])
+
+dnl #
+dnl # Check if kernel cc supports -fno-ipa-sra option.
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_KERNEL_CC_NO_IPA_SRA], [
+       AC_MSG_CHECKING([whether $KERNEL_CC supports -fno-ipa-sra])
+
+       saved_cc="$CC"
+       saved_flags="$CFLAGS"
+       CC="gcc"
+       CFLAGS="$CFLAGS -Werror -fno-ipa-sra"
+
+       AS_IF([ test -n "$KERNEL_CC" ], [
+               CC="$KERNEL_CC"
+       ])
+       AS_IF([ test -n "$KERNEL_LLVM" ], [
+               CC="clang"
+       ])
+
+       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [
+               KERNEL_NO_IPA_SRA=-fno-ipa-sra
+               AC_MSG_RESULT([yes])
+       ], [
+               KERNEL_NO_IPA_SRA=
+               AC_MSG_RESULT([no])
+       ])
+
+       CC="$saved_cc"
+       CFLAGS="$saved_flags"
+       AC_SUBST([KERNEL_NO_IPA_SRA])
+])
index bb10bec0401773837399446e8ddf9d3db491d39b..6355952487f70ad4825a836351d23441a5cfb22e 100644 (file)
@@ -81,7 +81,7 @@ AC_DEFUN([ZFS_AC_DEBUG], [
 AC_DEFUN([ZFS_AC_DEBUGINFO_ENABLE], [
        DEBUG_CFLAGS="$DEBUG_CFLAGS -g -fno-inline $NO_IPA_SRA"
 
-       KERNEL_DEBUG_CFLAGS="$KERNEL_DEBUG_CFLAGS -fno-inline $NO_IPA_SRA"
+       KERNEL_DEBUG_CFLAGS="$KERNEL_DEBUG_CFLAGS -fno-inline $KERNEL_NO_IPA_SRA"
        KERNEL_MAKE="$KERNEL_MAKE CONFIG_DEBUG_INFO=y"
 
        DEBUGINFO_ZFS="_with_debuginfo"
@@ -219,6 +219,7 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [
        ZFS_AC_CONFIG_ALWAYS_CC_FORMAT_OVERFLOW
        ZFS_AC_CONFIG_ALWAYS_CC_NO_OMIT_FRAME_POINTER
        ZFS_AC_CONFIG_ALWAYS_CC_NO_IPA_SRA
+       ZFS_AC_CONFIG_ALWAYS_KERNEL_CC_NO_IPA_SRA
        ZFS_AC_CONFIG_ALWAYS_CC_ASAN
        ZFS_AC_CONFIG_ALWAYS_CC_UBSAN
        ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD
index 581d50e64b4257e25d791f7cc84750040a4075c2..a39f9d9d0500373dfa3a7edd87496de1d6b1a324 100644 (file)
@@ -42,6 +42,12 @@ endif
 asflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS)
 ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS)
 
+ifeq ($(CONFIG_ARM64),y)
+CFLAGS_REMOVE_zcommon/zfs_fletcher_aarch64_neon.o += -mgeneral-regs-only
+CFLAGS_REMOVE_zfs/vdev_raidz_math_aarch64_neon.o += -mgeneral-regs-only
+CFLAGS_REMOVE_zfs/vdev_raidz_math_aarch64_neonx2.o += -mgeneral-regs-only
+endif
+
 # Suppress unused-value warnings in sparc64 architecture headers
 ccflags-$(CONFIG_SPARC64) += -Wno-unused-value
 
index 345133d7433a937a4079da50b102562fafb74eb8..b1f710cc04398b2d625f1641a26c225c87e58cff 100644 (file)
@@ -346,9 +346,11 @@ Q256(size_t bitlen, const uint32_t *data, uint32_t *restrict p)
  * which only goes over it by a hair (1248 bytes on ARM32).
  */
 #include <sys/isa_defs.h>      /* for _ILP32 */
-#ifdef _ILP32   /* We're 32-bit, assume small stack frames */
+#if defined(_ILP32)   /* We're 32-bit, assume small stack frames */
+#if defined(__GNUC__) && !defined(__clang__)
 #pragma GCC diagnostic ignored "-Wframe-larger-than="
 #endif
+#endif
 
 #if defined(__IBMC__) && defined(_AIX) && defined(__64BIT__)
 static inline size_t
index 7ba165a48511f9ea91df71b88e6279f86d67c8bd..3ad52da5f6a34fefac924fe52ab353da32eb4d80 100644 (file)
@@ -30,7 +30,9 @@
  * the #pragma here to ignore the warning.
  */
 #if defined(_ILP32) || defined(__powerpc)      /* Assume small stack */
+#if defined(__GNUC__) && !defined(__clang__)
 #pragma GCC diagnostic ignored "-Wframe-larger-than="
+#endif
 /*
  * We're running on 32-bit, don't unroll loops to save stack frame space
  *
index e2a3d0279d7fb41688355a909e5b0fe45edf64f0..291bca044e7bb05fc2f31127c03ab823910e6882 100644 (file)
@@ -197,7 +197,8 @@ l_noret luaD_throw (lua_State *L, int errcode) {
   }
 }
 
-#if defined(HAVE_INFINITE_RECURSION)
+#if defined(__GNUC__) && !defined(__clang__) && \
+       defined(HAVE_INFINITE_RECURSION)
 #pragma GCC diagnostic pop
 #endif
 
index 71eedf635f73f4cde9faed5ca401418755166fa0..38515023e4b87f3d7be1e0135e1dda3d0765fe6d 100644 (file)
@@ -254,8 +254,10 @@ __div_u64(uint64_t u, uint32_t v)
  * replacements for libgcc-provided functions and will never be called
  * directly.
  */
+#if defined(__GNUC__) && !defined(__clang__)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wmissing-prototypes"
+#endif
 
 /*
  * Implementation of 64-bit unsigned division for 32-bit machines.
@@ -449,7 +451,9 @@ __aeabi_ldivmod(int64_t u, int64_t v)
 EXPORT_SYMBOL(__aeabi_ldivmod);
 #endif /* __arm || __arm__ */
 
+#if defined(__GNUC__) && !defined(__clang__)
 #pragma GCC diagnostic pop
+#endif
 
 #endif /* BITS_PER_LONG */
 
index 0a1f05fd6664a3dbd7ab81afc4d94c6694e5a098..bd9de91a4ba82abe2edab8038fe59b0d90828b8f 100644 (file)
@@ -210,9 +210,13 @@ DEFINE_GEN_METHODS(aarch64_neonx2);
  * If compiled with -O0, gcc doesn't do any stack frame coalescing
  * and -Wframe-larger-than=1024 is triggered in debug mode.
  */
+#if defined(__GNUC__) && !defined(__clang__)
 #pragma GCC diagnostic ignored "-Wframe-larger-than="
+#endif
 DEFINE_REC_METHODS(aarch64_neonx2);
+#if defined(__GNUC__) && !defined(__clang__)
 #pragma GCC diagnostic pop
+#endif
 
 static boolean_t
 raidz_will_aarch64_neonx2_work(void)