On Tue, Jul 13, 2021 at 12:27:48PM +0300, Vladimir Sementsov-Ogievskiy wrote: > 13.07.2021 00:55, Richard Henderson wrote: > > From clang-13: > > nbd/server.c:976:22: error: variable 'bitmaps' set but not used \ > > [-Werror,-Wunused-but-set-variable] > >
> > +++ b/nbd/server.c > > @@ -973,7 +973,6 @@ static int nbd_negotiate_meta_queries(NBDClient *client, > > { > > int ret; > > g_autofree char *export_name = NULL; > > - g_autofree bool *bitmaps = NULL; > > NBDExportMetaContexts local_meta = {0}; > > uint32_t nb_queries; > > size_t i; > > @@ -1007,9 +1006,6 @@ static int nbd_negotiate_meta_queries(NBDClient > > *client, > > "export '%s' not present", sane_name); > > } > > meta->bitmaps = g_new0(bool, meta->exp->nr_export_bitmaps); > > - if (client->opt == NBD_OPT_LIST_META_CONTEXT) { > > - bitmaps = meta->bitmaps; > > - } > > ret = nbd_opt_read(client, &nb_queries, sizeof(nb_queries), false, > > errp); > > if (ret <= 0) { > > > > > Hm. I'm afraid, this way meta->bitmaps will be leaked in > NBD_OPT_LIST_META_CONTEXT case. > > Actually, "bitmaps" _is_ used, in cleanup handler, setup by g_autofree. So > it's a false positive. > Correct; this patch is wrong, and would cause a memory leak. This is a false positive in clang, and a known issue that clang is in general unable to see that g_autofree variables are used, sometimes for their intentional side effects such as easier memory cleanup as done here. I suspect that the definition of g_autofree already uses __attribute__((unused)) to work around clang's oddities, which means I'm not sure how to silence clang on this one. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org