On Tue, Sep 14, 2021 at 03:28:06PM +0200, Tim Wiederhake wrote: > On Fri, 2021-09-10 at 14:35 +0200, Ján Tomko wrote: > > On a Friday in 2021, Tim Wiederhake wrote: > > > Workaround for a bug in clang. Clang emits an unused-variable warning > > > if the variable is only accessed on scope exit by a destructor > > > function. > > > Note that gcc does not exhibit this behavior. > > > > > > See https://bugs.llvm.org/show_bug.cgi?id=3888 and > > > https://bugs.llvm.org/show_bug.cgi?id=43482. > > > > > > Signed-off-by: Tim Wiederhake <twiederh@xxxxxxxxxx> > > > --- > > > src/util/glibcompat.h | 19 +++++++++++++++++++ > > > 1 file changed, 19 insertions(+) > > > > > > > https://listman.redhat.com/archives/libvir-list/2021-August/msg00863.html > > > > Jano > > >From the mail you linked: > > > It's our usage that is weird here. > > I disagree. I believe our usage of `g_auto*` (and in extension, > `__attribute__((cleanup))`) is exactly as this feature is meant to be > used. > > > These are not needed since in all cases, the G_GNUC_UNUSED can be > > used unconditionally for both gcc and CLang in the respective macros. > > That would disable unused-variable-checking for other compilers as > well, e.g. gcc, robbing us of a valuable diagnostic. I don't think G_GNUC_UNUSED impacts GCC warnings at all. >From GCC's POV, the attribute((cleanup(freefunc))) annotation gets expanded into a set of calls to freefunc(). So any variable declared with a "cleanup" attribute will always appear used to GCC, because of these auto inserted calls. $ cat demo.c #include <stdlib.h> static void freeit(void *ptrptr) { void *ptr = *(void **)ptrptr; free(ptr); } void foo(void) { __attribute__((cleanup(freeit))) char *a = malloc(1); __attribute__((unused)) __attribute__((cleanup(freeit))) char *b = malloc(1); __attribute__((unused)) char *c = malloc(1); char *d = malloc(1); char *e = malloc(1); free(d); } $ gcc -c -Wall demo.c demo.c: In function ‘foo’: demo.c:13:9: warning: unused variable ‘b’ [-Wunused-variable] 13 | char *e = malloc(1); | ^ 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 :|