https://github.com/openzfs/zfs/commit/a6e8113fed8a508ffda13cf1c4d8da99a4e8133a https://github.com/openzfs/zfs/commit/60e389ca10085acfa7cd35f79ab4465d968a942f Cherry-picked from https://github.com/openzfs/zfs/pull/13575 https://bugs.gentoo.org/855182 --- a/config/always-compiler-options.m4 +++ b/config/always-compiler-options.m4 @@ -205,6 +205,29 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_OMIT_FRAME_POINTER], [ AC_SUBST([NO_OMIT_FRAME_POINTER]) ]) +dnl # +dnl # Check if cc supports -Winfinite-recursion option. +dnl # +AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_INFINITE_RECURSION], [ + AC_MSG_CHECKING([whether $CC supports -Winfinite-recursion]) + + saved_flags="$CFLAGS" + CFLAGS="$CFLAGS -Werror -Winfinite-recursion" + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ + INFINITE_RECURSION=-Winfinite-recursion + AC_DEFINE([HAVE_INFINITE_RECURSION], 1, + [Define if compiler supports -Winfinite-recursion]) + AC_MSG_RESULT([yes]) + ], [ + INFINITE_RECURSION= + AC_MSG_RESULT([no]) + ]) + + CFLAGS="$saved_flags" + AC_SUBST([INFINITE_RECURSION]) +]) + dnl # dnl # Check if cc supports -fno-ipa-sra option. dnl # --- 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_INFINITE_RECURSION ZFS_AC_CONFIG_ALWAYS_CC_IMPLICIT_FALLTHROUGH ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION --- a/module/lua/ldo.c +++ b/module/lua/ldo.c @@ -168,6 +168,13 @@ static void seterrorobj (lua_State *L, int errcode, StkId oldtop) { L->top = oldtop + 1; } +/* + * Silence infinite recursion warning which was added to -Wall in gcc 12.1 + */ +#if defined(HAVE_INFINITE_RECURSION) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Winfinite-recursion" +#endif l_noret luaD_throw (lua_State *L, int errcode) { if (L->errorJmp) { /* thread has an error handler? */ @@ -190,6 +197,10 @@ l_noret luaD_throw (lua_State *L, int errcode) { } } +#if defined(HAVE_INFINITE_RECURSION) +#pragma GCC diagnostic pop +#endif + int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud) { unsigned short oldnCcalls = L->nCcalls;