[libvirt PATCH v2] src: workaround warning triggered in glib 2.69

Daniel P. Berrangé posted 1 patch 2 years, 9 months ago
Test syntax-check failed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20210723131925.2798625-1-berrange@redhat.com
src/internal.h | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
[libvirt PATCH v2] src: workaround warning triggered in glib 2.69
Posted by Daniel P. Berrangé 2 years, 9 months ago
Libvirt is using the G_GNUC_FALLTHROUGH macro provided by glib since
version 2.60. Since we need to support older glib, we also have some
compatibility code to define it if missing.

We set the GLIB_VERSION_MAX_ALLOWED macro to ensure we get warnings
when we use an API that dates from a glib version newer than our
minimum benchmark. Historically this didn't get enforced for (most)
macros, but GLib 2.69 has addressed that gap.

This causes our usage of G_GNUC_FALLTHROUGH to trigger warnings.
GLib is right to warn, because it does not know that we have added
our own fallback for older versions.

The only way to squelch this warning though, is to fully undefine
the GLib provided G_GNUC_FALLTHROUGH and use our own in its place.
We'll be able to remove all this compat burden when we finally
update the min glib version to be >= 2.60

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
 src/internal.h | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/internal.h b/src/internal.h
index 0a03dfc46f..e1250a59fe 100644
--- a/src/internal.h
+++ b/src/internal.h
@@ -147,8 +147,17 @@
  *
  * silence the compiler warning when falling through a switch case
  *
- * TODO: Remove after upgrading to GLib >= 2.60
+ * Note: GLib 2.69.0 introduced version checks on the
+ * macro usage. Thus an app setting GLIB_VERSION_MAX_ALLOWED
+ * to less than 2.60 will trigger a warning using G_GNUC_FALLTHROUGH
+ * Normally the warning is a good thing, but we want to use our
+ * fallback impl, so we have to temporarily cull the GLib macro.
+ *
+ * All this should be removed once updating to min GLib >= 2.60
  */
+#if GLIB_CHECK_VERSION(2, 69, 0)
+# undef G_GNUC_FALLTHROUGH
+#endif
 #ifndef G_GNUC_FALLTHROUGH
 # if __GNUC_PREREQ (7, 0)
 #  define G_GNUC_FALLTHROUGH __attribute__((fallthrough))
-- 
2.31.1

Re: [libvirt PATCH v2] src: workaround warning triggered in glib 2.69
Posted by Peter Krempa 2 years, 9 months ago
On Fri, Jul 23, 2021 at 14:19:25 +0100, Daniel P. Berrangé wrote:
> Libvirt is using the G_GNUC_FALLTHROUGH macro provided by glib since
> version 2.60. Since we need to support older glib, we also have some
> compatibility code to define it if missing.
> 
> We set the GLIB_VERSION_MAX_ALLOWED macro to ensure we get warnings
> when we use an API that dates from a glib version newer than our
> minimum benchmark. Historically this didn't get enforced for (most)
> macros, but GLib 2.69 has addressed that gap.
> 
> This causes our usage of G_GNUC_FALLTHROUGH to trigger warnings.
> GLib is right to warn, because it does not know that we have added
> our own fallback for older versions.
> 
> The only way to squelch this warning though, is to fully undefine
> the GLib provided G_GNUC_FALLTHROUGH and use our own in its place.
> We'll be able to remove all this compat burden when we finally
> update the min glib version to be >= 2.60
> 
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
>  src/internal.h | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)

Reviewed-by: Peter Krempa <pkrempa@redhat.com>