
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 :|