]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
meson: avoid bogus warnings from clang and g_autoptr
authorDaniel P. Berrangé <berrange@redhat.com>
Tue, 31 Aug 2021 14:05:15 +0000 (15:05 +0100)
committerDaniel P. Berrangé <berrange@redhat.com>
Wed, 1 Sep 2021 14:29:28 +0000 (15:29 +0100)
Clang has previously had trouble with G_DEFINE_AUTOPTR_CLEANUP_FUNC
generated code, thinking it was unused. We turn off -Wunused-function
to avoid tripping up on that with CLang.

New Clang has started having trouble with g_autoptr now too. In usage
scenarios where the variable is set, but never again read, it thinks
it is unused not realizing the destructor has useful side effects.
For this we have to skip -Wunused-but-set-variable on CLang.

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
build-aux/syntax-check.mk
meson.build

index 2058af0b77ce175262b172fb7a7706466b6ff08b..5c5a2a87713b6e37b1f5a50f5fd9836c2ab218e6 100644 (file)
@@ -1589,7 +1589,7 @@ exclude_file_name_regexp--sc_prohibit_canonicalize_file_name = \
   ^(build-aux/syntax-check\.mk|tests/virfilemock\.c)$$
 
 exclude_file_name_regexp--sc_prohibit_raw_allocation = \
-  ^(docs/advanced-tests\.rst|src/util/viralloc\.[ch]|examples/.*|tests/(securityselinuxhelper|(vircgroup|nss)mock|commandhelper)\.c|tools/wireshark/src/packet-libvirt\.c|tools/nss/libvirt_nss(_leases|_macs)?\.c)$$
+  ^(meson\.build|docs/advanced-tests\.rst|src/util/viralloc\.[ch]|examples/.*|tests/(securityselinuxhelper|(vircgroup|nss)mock|commandhelper)\.c|tools/wireshark/src/packet-libvirt\.c|tools/nss/libvirt_nss(_leases|_macs)?\.c)$$
 
 exclude_file_name_regexp--sc_prohibit_readlink = \
   ^src/(util/virutil|lxc/lxc_container)\.c$$
index 9d493ccd9eb270b7f22edfabd96d3e7bf9bfd7e5..a8c99ac4b162c33125e6d473c39be4b12481b8cc 100644 (file)
@@ -470,6 +470,27 @@ if get_option('warning_level') == '2'
     supported_cc_flags += [ '-Wno-unused-function' ]
   endif
 
+  if supported_cc_flags.contains('-Wunused-but-set-variable')
+    # Clang complains about unused variables in many scenarios related
+    # to attribute((cleanup)) aka g_auto*
+    w_unused_but_set_var_args = [ '-Wunused-but-set-variable', '-Werror' ]
+    w_unused_but_set_var_code = '''
+      static inline void free_pointer (void *p) {
+        void **pp = (void**)p;
+        free (*pp);
+      }
+
+      int main(void) {
+        __attribute__((cleanup(free_pointer))) char *buffer = 0x0;
+        buffer = 0x1;
+      }
+    '''
+    # We previously turned on unused-but-set-variable, so we must turn
+    # it off again explicitly now.
+    if not cc.compiles(w_unused_but_set_var_code, args: w_unused_but_set_var_args)
+      supported_cc_flags += [ '-Wno-unused-but-set-variable' ]
+    endif
+  endif
 endif
 add_project_arguments(supported_cc_flags, language: 'c')