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(a)redhat.com>
> > ---
> > 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 :|