From: Yu Watanabe Date: Thu, 16 Jan 2025 19:27:36 +0000 (+0900) Subject: fundamental-macro: conditionalize several gcc warning pragmas X-Git-Tag: v258-rc1~1574^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F36051%2Fhead;p=thirdparty%2Fsystemd.git fundamental-macro: conditionalize several gcc warning pragmas This fixes the following error: In file included from ../src/basic/macro.h:13, from ../src/basic/env-util.h:9, from ../src/nss-systemd/nss-systemd.c:7: ../src/fundamental/macro-fundamental.h:61:9: error: option ‘-Wzero-as-null-pointer-constant’ is valid for C++/ObjC++ but not for C [-Werror=pragmas] 61 | _Pragma("GCC diagnostic ignored \"-Wzero-as-null-pointer-constant\"") | ^~~~~~~ ../src/nss-systemd/nss-systemd.c:106:1: note: in expansion of macro ‘DISABLE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT’ 106 | DISABLE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT; | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors --- diff --git a/meson.build b/meson.build index f9f400a7d64..48ba967d0ee 100644 --- a/meson.build +++ b/meson.build @@ -516,9 +516,6 @@ add_project_link_arguments( userspace_c_args += cc.get_supported_arguments(possible_cc_flags) userspace_c_ld_args += cc.get_supported_link_arguments(possible_link_flags) -have = cc.has_argument('-Wzero-length-bounds') -conf.set10('HAVE_ZERO_LENGTH_BOUNDS', have) - if cc.compiles(''' #include #include @@ -538,6 +535,14 @@ endif cpp = ' '.join(cc.cmd_array() + get_option('c_args')) + ' -E' +# new in GCC 10 +have = cc.has_argument('-Wzero-length-bounds') +conf.set10('HAVE_WARNING_ZERO_LENGTH_BOUNDS', have) + +# new in GCC 15 +have = cc.has_argument('-Wzero-as-null-pointer-constant') +conf.set10('HAVE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT', have) + ##################################################################### # compilation result tests diff --git a/src/boot/meson.build b/src/boot/meson.build index cc5102c5518..f7269962334 100644 --- a/src/boot/meson.build +++ b/src/boot/meson.build @@ -74,6 +74,12 @@ if conf.get('ENABLE_BOOTLOADER') != 1 endif efi_conf = configuration_data() + +# import several configs from userspace +foreach name : ['HAVE_WARNING_ZERO_LENGTH_BOUNDS', 'HAVE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT'] + efi_conf.set10(name, conf.get(name) == 1) +endforeach + efi_conf.set10('ENABLE_TPM', get_option('tpm')) foreach ctype : ['color-normal', 'color-entry', 'color-highlight', 'color-edit'] diff --git a/src/fundamental/macro-fundamental.h b/src/fundamental/macro-fundamental.h index 7bee2915e1b..5eb31cd7428 100644 --- a/src/fundamental/macro-fundamental.h +++ b/src/fundamental/macro-fundamental.h @@ -52,13 +52,23 @@ _Pragma("GCC diagnostic push"); \ _Pragma("GCC diagnostic ignored \"-Wstringop-truncation\"") -#define DISABLE_WARNING_ZERO_LENGTH_BOUNDS \ +#if HAVE_WARNING_ZERO_LENGTH_BOUNDS +# define DISABLE_WARNING_ZERO_LENGTH_BOUNDS \ _Pragma("GCC diagnostic push"); \ _Pragma("GCC diagnostic ignored \"-Wzero-length-bounds\"") +#else +# define DISABLE_WARNING_ZERO_LENGTH_BOUNDS \ + _Pragma("GCC diagnostic push") +#endif -#define DISABLE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT \ +#if HAVE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT +# define DISABLE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT \ _Pragma("GCC diagnostic push"); \ _Pragma("GCC diagnostic ignored \"-Wzero-as-null-pointer-constant\"") +#else +# define DISABLE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT \ + _Pragma("GCC diagnostic push") +#endif #define REENABLE_WARNING \ _Pragma("GCC diagnostic pop")