When running Clang static analyzer on macOS I'm getting:
include/qemu/osdep.h:634:8: error: redefinition of 'iovec'
634 | struct iovec {
| ^
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_iovec_t.h:31:8: note: previous definition is here
31 | struct iovec {
| ^
1 error generated.
Looking at meson-logs.txt, the analyzer enables -Wunused-value
making meson generated code to fail:
Code:
#include <sys/uio.h>
void bar(void) {
sizeof(struct iovec);
}
-----------
stderr:
meson-private/tmpe8_1b_00/testfile.c:3:13: error: expression result unused [-Werror,-Wunused-value]
3 | sizeof(struct iovec);
| ^~~~~~~~~~~~~~~~~~~~
1 error generated.
-----------
Checking for type "struct iovec" : NO
Code:
#include <utmpx.h>
void bar(void) {
sizeof(struct utmpx);
}
-----------
stderr:
meson-private/tmp3n0u490p/testfile.c:3:13: error: expression result unused [-Werror,-Wunused-value]
3 | sizeof(struct utmpx);
| ^~~~~~~~~~~~~~~~~~~~
1 error generated.
-----------
Checking for type "struct utmpx" : NO
Code:
#include <getopt.h>
int main(void) {
/* If it's not defined as a macro, try to use as a symbol */
#ifndef optreset
optreset;
#endif
return 0;
}
-----------
stderr:
meson-private/tmp1rzob_os/testfile.c:6:17: error: expression result unused [-Werror,-Wunused-value]
6 | optreset;
| ^~~~~~~~
1 error generated.
-----------
Header "getopt.h" has symbol "optreset" : NO
Code:
#include <vmnet/vmnet.h>
int main(void) {
/* If it's not defined as a macro, try to use as a symbol */
#ifndef VMNET_BRIDGED_MODE
VMNET_BRIDGED_MODE;
#endif
return 0;
}
-----------
stderr:
meson-private/tmpl9jgsxpt/testfile.c:6:17: error: expression result unused [-Werror,-Wunused-value]
6 | VMNET_BRIDGED_MODE;
| ^~~~~~~~~~~~~~~~~~
1 error generated.
-----------
Header "vmnet/vmnet.h" has symbol "VMNET_BRIDGED_MODE" with dependency appleframeworks: NO
../meson.build:1174: WARNING: vmnet.framework API is outdated, disabling
Fix by explicitly disabling -Wunused-value from these meson checks.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
RFC: Probably meson should do that in has_header_symbol() / has_type()?
---
meson.build | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/meson.build b/meson.build
index 85f74854735..9d93dcd95d7 100644
--- a/meson.build
+++ b/meson.build
@@ -1189,7 +1189,8 @@ cocoa = dependency('appleframeworks',
vmnet = dependency('appleframeworks', modules: 'vmnet', required: get_option('vmnet'))
if vmnet.found() and not cc.has_header_symbol('vmnet/vmnet.h',
'VMNET_BRIDGED_MODE',
- dependencies: vmnet)
+ dependencies: vmnet,
+ args: '-Wno-unused-value')
vmnet = not_found
if get_option('vmnet').enabled()
error('vmnet.framework API is outdated')
@@ -2713,7 +2714,7 @@ config_host_data.set('CONFIG_RTNETLINK',
config_host_data.set('CONFIG_SYSMACROS',
cc.has_header_symbol('sys/sysmacros.h', 'makedev'))
config_host_data.set('HAVE_OPTRESET',
- cc.has_header_symbol('getopt.h', 'optreset'))
+ cc.has_header_symbol('getopt.h', 'optreset', args: '-Wno-unused-value'))
config_host_data.set('HAVE_IPPROTO_MPTCP',
cc.has_header_symbol('netinet/in.h', 'IPPROTO_MPTCP'))
@@ -2731,10 +2732,12 @@ config_host_data.set('HAVE_BLK_ZONE_REP_CAPACITY',
# has_type
config_host_data.set('CONFIG_IOVEC',
cc.has_type('struct iovec',
- prefix: '#include <sys/uio.h>'))
+ prefix: '#include <sys/uio.h>',
+ args: '-Wno-unused-value'))
config_host_data.set('HAVE_UTMPX',
cc.has_type('struct utmpx',
- prefix: '#include <utmpx.h>'))
+ prefix: '#include <utmpx.h>',
+ args: '-Wno-unused-value'))
config_host_data.set('CONFIG_EVENTFD', cc.links('''
#include <sys/eventfd.h>
--
2.45.2
On Thu Dec 19, 2024 at 4:21 AM AEST, Philippe Mathieu-Daudé wrote: > When running Clang static analyzer on macOS I'm getting: > > include/qemu/osdep.h:634:8: error: redefinition of 'iovec' > 634 | struct iovec { > | ^ > /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_iovec_t.h:31:8: note: previous definition is here > 31 | struct iovec { > | ^ > 1 error generated. > > Looking at meson-logs.txt, the analyzer enables -Wunused-value > making meson generated code to fail: > > Code: > #include <sys/uio.h> > void bar(void) { > sizeof(struct iovec); > } > ----------- > stderr: > meson-private/tmpe8_1b_00/testfile.c:3:13: error: expression result unused [-Werror,-Wunused-value] > 3 | sizeof(struct iovec); > | ^~~~~~~~~~~~~~~~~~~~ > 1 error generated. > ----------- > Checking for type "struct iovec" : NO > > Code: > #include <utmpx.h> > void bar(void) { > sizeof(struct utmpx); > } > ----------- > stderr: > meson-private/tmp3n0u490p/testfile.c:3:13: error: expression result unused [-Werror,-Wunused-value] > 3 | sizeof(struct utmpx); > | ^~~~~~~~~~~~~~~~~~~~ > 1 error generated. > ----------- > Checking for type "struct utmpx" : NO > > Code: > > #include <getopt.h> > int main(void) { > /* If it's not defined as a macro, try to use as a symbol */ > #ifndef optreset > optreset; > #endif > return 0; > } > ----------- > stderr: > meson-private/tmp1rzob_os/testfile.c:6:17: error: expression result unused [-Werror,-Wunused-value] > 6 | optreset; > | ^~~~~~~~ > 1 error generated. > ----------- > Header "getopt.h" has symbol "optreset" : NO > > Code: > > #include <vmnet/vmnet.h> > int main(void) { > /* If it's not defined as a macro, try to use as a symbol */ > #ifndef VMNET_BRIDGED_MODE > VMNET_BRIDGED_MODE; > #endif > return 0; > } > ----------- > stderr: > meson-private/tmpl9jgsxpt/testfile.c:6:17: error: expression result unused [-Werror,-Wunused-value] > 6 | VMNET_BRIDGED_MODE; > | ^~~~~~~~~~~~~~~~~~ > 1 error generated. > ----------- > Header "vmnet/vmnet.h" has symbol "VMNET_BRIDGED_MODE" with dependency appleframeworks: NO > ../meson.build:1174: WARNING: vmnet.framework API is outdated, disabling > > Fix by explicitly disabling -Wunused-value from these meson checks. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > RFC: Probably meson should do that in has_header_symbol() / has_type()? I don't know about the build system to answer this, but should we instead disable -Werror on these tests to be a bit more future-proof? Compilers often add new warnings or catch more cases of existing warnings. Alternative would be to keep -Werror but fail the build if a test throws a warning, but that seems like a lot more work for little benefit... Thanks, Nick > --- > meson.build | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/meson.build b/meson.build > index 85f74854735..9d93dcd95d7 100644 > --- a/meson.build > +++ b/meson.build > @@ -1189,7 +1189,8 @@ cocoa = dependency('appleframeworks', > vmnet = dependency('appleframeworks', modules: 'vmnet', required: get_option('vmnet')) > if vmnet.found() and not cc.has_header_symbol('vmnet/vmnet.h', > 'VMNET_BRIDGED_MODE', > - dependencies: vmnet) > + dependencies: vmnet, > + args: '-Wno-unused-value') > vmnet = not_found > if get_option('vmnet').enabled() > error('vmnet.framework API is outdated') > @@ -2713,7 +2714,7 @@ config_host_data.set('CONFIG_RTNETLINK', > config_host_data.set('CONFIG_SYSMACROS', > cc.has_header_symbol('sys/sysmacros.h', 'makedev')) > config_host_data.set('HAVE_OPTRESET', > - cc.has_header_symbol('getopt.h', 'optreset')) > + cc.has_header_symbol('getopt.h', 'optreset', args: '-Wno-unused-value')) > config_host_data.set('HAVE_IPPROTO_MPTCP', > cc.has_header_symbol('netinet/in.h', 'IPPROTO_MPTCP')) > > @@ -2731,10 +2732,12 @@ config_host_data.set('HAVE_BLK_ZONE_REP_CAPACITY', > # has_type > config_host_data.set('CONFIG_IOVEC', > cc.has_type('struct iovec', > - prefix: '#include <sys/uio.h>')) > + prefix: '#include <sys/uio.h>', > + args: '-Wno-unused-value')) > config_host_data.set('HAVE_UTMPX', > cc.has_type('struct utmpx', > - prefix: '#include <utmpx.h>')) > + prefix: '#include <utmpx.h>', > + args: '-Wno-unused-value')) > > config_host_data.set('CONFIG_EVENTFD', cc.links(''' > #include <sys/eventfd.h>
On 19/12/24 01:37, Nicholas Piggin wrote: > On Thu Dec 19, 2024 at 4:21 AM AEST, Philippe Mathieu-Daudé wrote: >> When running Clang static analyzer on macOS I'm getting: >> >> include/qemu/osdep.h:634:8: error: redefinition of 'iovec' >> 634 | struct iovec { >> | ^ >> /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/_types/_iovec_t.h:31:8: note: previous definition is here >> 31 | struct iovec { >> | ^ >> 1 error generated. >> >> Looking at meson-logs.txt, the analyzer enables -Wunused-value >> making meson generated code to fail: >> >> Code: >> #include <sys/uio.h> >> void bar(void) { >> sizeof(struct iovec); >> } >> ----------- >> stderr: >> meson-private/tmpe8_1b_00/testfile.c:3:13: error: expression result unused [-Werror,-Wunused-value] >> 3 | sizeof(struct iovec); >> | ^~~~~~~~~~~~~~~~~~~~ >> 1 error generated. >> ----------- >> Checking for type "struct iovec" : NO >> >> Code: >> #include <utmpx.h> >> void bar(void) { >> sizeof(struct utmpx); >> } >> ----------- >> stderr: >> meson-private/tmp3n0u490p/testfile.c:3:13: error: expression result unused [-Werror,-Wunused-value] >> 3 | sizeof(struct utmpx); >> | ^~~~~~~~~~~~~~~~~~~~ >> 1 error generated. >> ----------- >> Checking for type "struct utmpx" : NO >> >> Code: >> >> #include <getopt.h> >> int main(void) { >> /* If it's not defined as a macro, try to use as a symbol */ >> #ifndef optreset >> optreset; >> #endif >> return 0; >> } >> ----------- >> stderr: >> meson-private/tmp1rzob_os/testfile.c:6:17: error: expression result unused [-Werror,-Wunused-value] >> 6 | optreset; >> | ^~~~~~~~ >> 1 error generated. >> ----------- >> Header "getopt.h" has symbol "optreset" : NO >> >> Code: >> >> #include <vmnet/vmnet.h> >> int main(void) { >> /* If it's not defined as a macro, try to use as a symbol */ >> #ifndef VMNET_BRIDGED_MODE >> VMNET_BRIDGED_MODE; >> #endif >> return 0; >> } >> ----------- >> stderr: >> meson-private/tmpl9jgsxpt/testfile.c:6:17: error: expression result unused [-Werror,-Wunused-value] >> 6 | VMNET_BRIDGED_MODE; >> | ^~~~~~~~~~~~~~~~~~ >> 1 error generated. >> ----------- >> Header "vmnet/vmnet.h" has symbol "VMNET_BRIDGED_MODE" with dependency appleframeworks: NO >> ../meson.build:1174: WARNING: vmnet.framework API is outdated, disabling >> >> Fix by explicitly disabling -Wunused-value from these meson checks. >> >> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> >> --- >> RFC: Probably meson should do that in has_header_symbol() / has_type()? > > I don't know about the build system to answer this, but should we > instead disable -Werror on these tests to be a bit more future-proof? > Compilers often add new warnings or catch more cases of existing > warnings. Sorry, I didn't mean to include this patch in this series. I happen to have my series on top of it and forgot to change the base commit. > Alternative would be to keep -Werror but fail the build if a test > throws a warning, but that seems like a lot more work for little > benefit... I'm trying to fix it on the meson side with this: -- >8 -- diff --git a/mesonbuild/compilers/mixins/clike.py b/mesonbuild/compilers/mixins/clike.py index d56547b47..9d6957973 100644 --- a/mesonbuild/compilers/mixins/clike.py +++ b/mesonbuild/compilers/mixins/clike.py @@ -360,7 +360,7 @@ class CLikeCompiler(Compiler): int main(void) {{ /* If it's not defined as a macro, try to use as a symbol */ #ifndef {symbol} - {symbol}; + (void) {symbol}; #endif return 0; }}''' @@ -885,7 +885,8 @@ class CLikeCompiler(Compiler): dependencies: T.Optional[T.List['Dependency']] = None) -> T.Tuple[bool, bool]: t = f'''{prefix} void bar(void) {{ - (void) sizeof({typename}); + size_t foo = sizeof({typename}); + (void) foo; }}''' return self.compiles(t, env, extra_args=extra_args, dependencies=dependencies) ---
On 12/19/24 09:39, Philippe Mathieu-Daudé wrote: > @@ -885,7 +885,8 @@ class CLikeCompiler(Compiler): > dependencies: T.Optional[T.List['Dependency']] = None) -> T.Tuple[bool, > bool]: > t = f'''{prefix} > void bar(void) {{ > - (void) sizeof({typename}); > + size_t foo = sizeof({typename}); > + (void) foo; > }}''' As I mentioned elsewhere, sizeof is a compile-time constant. The function wrapper is getting in the way. This can be just unsigned long foo = sizeof({typename}); I.e. initialization of a global variable, with no need for <stddef.h> or any other system header for size_t. r~
© 2016 - 2025 Red Hat, Inc.