diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2025-01-16 22:41:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-16 22:41:31 +0100 |
commit | 4e97e697c048786c02ece100ec975e5c5b011358 (patch) | |
tree | cf612179f7c1b461a52e11810439356b148f1bf3 | |
parent | Two readme tweaks (#36053) (diff) | |
parent | fundamental-macro: conditionalize several gcc warning pragmas (diff) | |
download | systemd-4e97e697c048786c02ece100ec975e5c5b011358.tar.xz systemd-4e97e697c048786c02ece100ec975e5c5b011358.zip |
Several fixlets for GCC warnings (#36051)
Replaces #36043 and #36039.
-rw-r--r-- | meson.build | 12 | ||||
-rw-r--r-- | src/basic/macro.h | 9 | ||||
-rw-r--r-- | src/boot/meson.build | 6 | ||||
-rw-r--r-- | src/fundamental/macro-fundamental.h | 22 | ||||
-rw-r--r-- | src/nss-systemd/nss-systemd.c | 4 | ||||
-rw-r--r-- | src/resolve/resolved-dns-dnssec.c | 15 | ||||
-rw-r--r-- | src/shared/ethtool-util.c | 8 |
7 files changed, 48 insertions, 28 deletions
diff --git a/meson.build b/meson.build index 9e1963970c..617d6d2452 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 <time.h> #include <inttypes.h> @@ -538,14 +535,19 @@ endif cpp = ' '.join(cc.cmd_array() + get_option('c_args')) + ' -E' -has_wstringop_truncation = cc.has_argument('-Wstringop-truncation') +# 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 conf.set('_GNU_SOURCE', 1) conf.set('__SANE_USERSPACE_TYPES__', true) -conf.set10('HAVE_WSTRINGOP_TRUNCATION', has_wstringop_truncation) conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>')) conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>')) diff --git a/src/basic/macro.h b/src/basic/macro.h index 68eb7bbd0e..026ec13637 100644 --- a/src/basic/macro.h +++ b/src/basic/macro.h @@ -30,15 +30,6 @@ #define _function_no_sanitize_float_cast_overflow_ #endif -#if HAVE_WSTRINGOP_TRUNCATION -# define DISABLE_WARNING_STRINGOP_TRUNCATION \ - _Pragma("GCC diagnostic push"); \ - _Pragma("GCC diagnostic ignored \"-Wstringop-truncation\"") -#else -# define DISABLE_WARNING_STRINGOP_TRUNCATION \ - _Pragma("GCC diagnostic push") -#endif - /* test harness */ #define EXIT_TEST_SKIP 77 diff --git a/src/boot/meson.build b/src/boot/meson.build index cc5102c551..f726996233 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 709657dd28..5eb31cd742 100644 --- a/src/fundamental/macro-fundamental.h +++ b/src/fundamental/macro-fundamental.h @@ -48,6 +48,28 @@ _Pragma("GCC diagnostic push"); \ _Pragma("GCC diagnostic ignored \"-Waddress\"") +#define DISABLE_WARNING_STRINGOP_TRUNCATION \ + _Pragma("GCC diagnostic push"); \ + _Pragma("GCC diagnostic ignored \"-Wstringop-truncation\"") + +#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 + +#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") diff --git a/src/nss-systemd/nss-systemd.c b/src/nss-systemd/nss-systemd.c index d686d920fc..683352fab9 100644 --- a/src/nss-systemd/nss-systemd.c +++ b/src/nss-systemd/nss-systemd.c @@ -101,6 +101,9 @@ typedef struct GetentData { bool by_membership; } GetentData; +/* On current glibc PTHREAD_MUTEX_INITIALIZER is defined in a way incompatible with + * -Wzero-as-null-pointer-constant, work around this for now. */ +DISABLE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT; static GetentData getpwent_data = { .mutex = PTHREAD_MUTEX_INITIALIZER, }; @@ -116,6 +119,7 @@ static GetentData getspent_data = { static GetentData getsgent_data = { .mutex = PTHREAD_MUTEX_INITIALIZER, }; +REENABLE_WARNING; static void setup_logging_once(void) { static pthread_once_t once = PTHREAD_ONCE_INIT; diff --git a/src/resolve/resolved-dns-dnssec.c b/src/resolve/resolved-dns-dnssec.c index 09cc2cb731..aff185a2dd 100644 --- a/src/resolve/resolved-dns-dnssec.c +++ b/src/resolve/resolved-dns-dnssec.c @@ -15,11 +15,10 @@ #include "string-table.h" #if PREFER_OPENSSL && OPENSSL_VERSION_MAJOR >= 3 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +DISABLE_WARNING_DEPRECATED_DECLARATIONS; DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(RSA*, RSA_free, NULL); DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(EC_KEY*, EC_KEY_free, NULL); -# pragma GCC diagnostic pop +REENABLE_WARNING; #endif #define VERIFY_RRS_MAX 256 @@ -101,8 +100,7 @@ static int dnssec_rsa_verify_raw( int r; #if PREFER_OPENSSL -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" + DISABLE_WARNING_DEPRECATED_DECLARATIONS; _cleanup_(RSA_freep) RSA *rpubkey = NULL; _cleanup_(EVP_PKEY_freep) EVP_PKEY *epubkey = NULL; _cleanup_(EVP_PKEY_CTX_freep) EVP_PKEY_CTX *ctx = NULL; @@ -153,7 +151,7 @@ static int dnssec_rsa_verify_raw( return log_debug_errno(SYNTHETIC_ERRNO(EIO), "Signature verification failed: 0x%lx", ERR_get_error()); -# pragma GCC diagnostic pop + REENABLE_WARNING; #else gcry_sexp_t public_key_sexp = NULL, data_sexp = NULL, signature_sexp = NULL; gcry_mpi_t n = NULL, e = NULL, s = NULL; @@ -303,8 +301,7 @@ static int dnssec_ecdsa_verify_raw( int k; #if PREFER_OPENSSL -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" + DISABLE_WARNING_DEPRECATED_DECLARATIONS; _cleanup_(EC_GROUP_freep) EC_GROUP *ec_group = NULL; _cleanup_(EC_POINT_freep) EC_POINT *p = NULL; _cleanup_(EC_KEY_freep) EC_KEY *eckey = NULL; @@ -365,7 +362,7 @@ static int dnssec_ecdsa_verify_raw( return log_debug_errno(SYNTHETIC_ERRNO(EIO), "Signature verification failed: 0x%lx", ERR_get_error()); -# pragma GCC diagnostic pop + REENABLE_WARNING; #else gcry_sexp_t public_key_sexp = NULL, data_sexp = NULL, signature_sexp = NULL; gcry_mpi_t q = NULL, r = NULL, s = NULL; diff --git a/src/shared/ethtool-util.c b/src/shared/ethtool-util.c index 51c75780cd..aeed917a6a 100644 --- a/src/shared/ethtool-util.c +++ b/src/shared/ethtool-util.c @@ -11,6 +11,7 @@ #include "extract-word.h" #include "fd-util.h" #include "log.h" +#include "macro-fundamental.h" #include "memory-util.h" #include "socket-util.h" #include "string-table.h" @@ -452,12 +453,9 @@ static int get_stringset(int ethtool_fd, const char *ifname, enum ethtool_string if (buffer.info.sset_mask == 0) return -EOPNOTSUPP; -#pragma GCC diagnostic push -#if HAVE_ZERO_LENGTH_BOUNDS -# pragma GCC diagnostic ignored "-Wzero-length-bounds" -#endif + DISABLE_WARNING_ZERO_LENGTH_BOUNDS; len = buffer.info.data[0]; -#pragma GCC diagnostic pop + REENABLE_WARNING; if (len == 0) return -EOPNOTSUPP; |