[libvirt PATCH] meson: avoid bogus warnings from clang and g_autoptr

Daniel P. Berrangé berrange at redhat.com
Tue Aug 31 16:10:23 UTC 2021


On Tue, Aug 31, 2021 at 05:23:08PM +0200, Pavel Hrdina wrote:
> On Tue, Aug 31, 2021 at 03:08:19PM +0100, Daniel P. Berrangé wrote:
> > 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.
> 
> s/CLang/Clang/
> 
> > Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
> > ---
> >  meson.build | 20 ++++++++++++++++++++
> >  1 file changed, 20 insertions(+)
> > 
> > diff --git a/meson.build b/meson.build
> > index 5af09d319a..dbd70b6483 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -470,6 +470,26 @@ if get_option('warning_level') == '2'
> >      supported_cc_flags += [ '-Wno-unused-function' ]
> >    endif
> >  
> > +  # Clang complains about unused variables in many scenarios arelated
> 
> s/arelated/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
> >  add_project_arguments(supported_cc_flags, language: 'c')
> 
> Reviewed-by: Pavel Hrdina <phrdina at redhat.com>

Turns out this broke on macOS / FreeBSD with older CLang so will need
a v2.



Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list