On Tue, Sep 14, 2021 at 03:28:12PM +0200, Tim Wiederhake wrote:
Adding G_GNUC_UNUSED at the usage sites (of which there will be a
couple hundred), will disable unused variable detection irregardless of
used compiler, just to work around a bug in one single compiler.
AFAIK, there is /no/ unused variable detection once you start
using g_auto, because there are always auto-inserted calls to
the cleanup funcs that cause the variables to be "used". It
is simply a bug in clang that it doesn't see this, while gcc
does. I don't see ny impact on GCC from adding G_GNUC_UNUSED
I would rather use "G_GNUC_UNUSED" only for variables / function
arguments that actually are unused. The lock guard variables are used,
but at the end of the scope rather than during.
> We should only re-define the g_auto* macros if we have first submitted
> this change to GLib upstream and they merged it.
>
What are your thoughts on macros (#if/#else'd over __clang__ to include
G_GNUC_UNUSED as required) like this?
#define VIR_LOCK_GUARD_MUTEX(mutex) \
g_autoptr(virLockGuard) G_GNUC_UNUSED lockguard ## __COUNTER__ =
virLockGuardNew(mutex);
#define VIR_LOCK_GUARD_OBJECT(object) \
g_autoptr(virLockGuard) G_GNUC_UNUSED lockguard ## __COUNTER__ =
virObjectLockGuard(object);
or:
#define VIR_LOCK_GUARD_MUTEX g_autoptr(virLockGuard) G_GNUC_UNUSED
VIR_LOCK_GUARD_MUTEX lock1 = virLockGuardNew(mutex);
VIR_LOCK_GUARD_MUTEX lock2 = virObjectLockGuard(object);
Those are reasonable as workarounds, but ultimately g_auto* still
need fixing upstream to add G_GNUC_UNUSED to their definitions.
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 :|