On Tue, Jul 13, 2021 at 08:01:34AM -0500, Eric Blake wrote: > > > @@ -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}; > > 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.
Hmm; in glib 2.68.2 (on Fedora 34), g_autofree does NOT include an attribute unused. Thus, does this silence the compiler? (Even cooler would be making the comment a link to an actual bug in the clang database, but I couldn't quickly find one) diff --git i/nbd/server.c w/nbd/server.c index b60ebc3ab6ac..393cbd81c57a 100644 --- i/nbd/server.c +++ w/nbd/server.c @@ -973,7 +973,8 @@ static int nbd_negotiate_meta_queries(NBDClient *client, { int ret; g_autofree char *export_name = NULL; - g_autofree bool *bitmaps = NULL; + /* G_GNUC_UNUSED needed to work around a clang bug */ + g_autofree G_GNUC_UNUSED bool *bitmaps = NULL; NBDExportMetaContexts local_meta = {0}; uint32_t nb_queries; size_t i; -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org