See comment for rationale. Signed-off-by: Tim Wiederhake <twiederh@xxxxxxxxxx> --- src/util/glibcompat.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/util/glibcompat.h b/src/util/glibcompat.h index 697687b967..fe495c5c32 100644 --- a/src/util/glibcompat.h +++ b/src/util/glibcompat.h @@ -86,3 +86,23 @@ char *vir_g_strdup_vprintf(const char *msg, va_list args) #define g_fsync vir_g_fsync void vir_g_source_unref(GSource *src, GMainContext *ctx); + +/* + * Clang falsely tags variable definitions as unused if the only access happens + * during the variables destruction at scope exit. See + * https://bugs.llvm.org/show_bug.cgi?id=3888 and + * https://bugs.llvm.org/show_bug.cgi?id=43482. + */ +#if defined(__clang__) +# define vir_g_auto(X) g_auto(X) G_GNUC_UNUSED +# define vir_g_autolist(X) g_autolist(X) G_GNUC_UNUSED +# define vir_g_autoptr(X) g_autoptr(X) G_GNUC_UNUSED +# define vir_g_autoqueue(X) g_autoqueue(X) G_GNUC_UNUSED +# define vir_g_autoslist(X) g_autoslist(X) G_GNUC_UNUSED +#else +# define vir_g_auto(X) g_auto(X) +# define vir_g_autolist(X) g_autolist(X) +# define vir_g_autoptr(X) g_autoptr(X) +# define vir_g_autoqueue(X) g_autoqueue(X) +# define vir_g_autoslist(X) g_autoslist(X) +#endif /* __clang__ */ -- 2.31.1