From 2633d8df616405bd54fd748d7bf887ebc4505b88 Mon Sep 17 00:00:00 2001 From: Sam James Date: Thu, 11 Apr 2024 19:34:04 +0100 Subject: [PATCH] xz: signals: suppress -Wsign-conversion on macOS On macOS, we get: ``` signals.c: In function 'signals_init': signals.c:76:17: error: conversion to 'sigset_t' {aka 'unsigned int'} from 'int' may change the sign of the result [-Werror=sign-conversion] 76 | sigaddset(&hooked_signals, sigs[i]); | ^~~~~~~~~ signals.c:81:17: error: conversion to 'sigset_t' {aka 'unsigned int'} from 'int' may change the sign of the result [-Werror=sign-conversion] 81 | sigaddset(&hooked_signals, message_progress_sigs[i]); | ^~~~~~~~~ signals.c:86:9: error: conversion to 'sigset_t' {aka 'unsigned int'} from 'int' may change the sign of the result [-Werror=sign-conversion] 86 | sigaddset(&hooked_signals, SIGTSTP); | ^~~~~~~~~ ``` We use `int` for `hooked_signals` but we can't just cast to whatever `sigset_t` is because `sigset_t` is an opaque type. It's an unsigned int on macOS. On macOS, `sigaddset` is implemented as a macro. Just suppress -Wsign-conversion for `signals_init` for macOS given there's no real nice way of fixing this. (cherry picked from commit 863f13d2828b99b0539ce73f9cf85bde32358034) --- src/xz/signals.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/xz/signals.c b/src/xz/signals.c index 13cc4c2b..20f03bee 100644 --- a/src/xz/signals.c +++ b/src/xz/signals.c @@ -49,6 +49,10 @@ signal_handler(int sig) } +#ifdef __APPLE__ +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wsign-conversion" +#endif extern void signals_init(void) { @@ -127,6 +131,9 @@ signals_init(void) return; } +#ifdef __APPLE__ +# pragma GCC diagnostic pop +#endif #ifndef __VMS