[libvirt PATCH] Do not disable incompatible-pointer-types-discards-qualifiers

Martin Kletzander mkletzan at redhat.com
Sun Nov 15 20:42:40 UTC 2020


This reverts commit b3710e9a2af402a2b620de570b062294e11190eb.

That check is very valuable for our code, but it causes issue with glib >=
2.67.0 when building with clang.

The reason is a combination of two commits in glib, firstly fdda405b6b1b which
adds a g_atomic_pointer_{set,get} variants that enforce stricter type
checking (by removing an extra cast) for compilers that support __typeof__, and
commit dce24dc4492d which effectively enabled the new variant of glib's atomic
code for clang.  This will not be necessary when glib's issue #600 [0] (8 years
old) is fixed.  Thankfully, MR #1719 [1], which is supposed to deal with this
issue was opened 3 weeks ago, so there is a slight sliver of hope.

[0] https://gitlab.gnome.org/GNOME/glib/-/issues/600
[1] https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719

Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
---
 meson.build               | 3 ---
 src/qemu/qemu_domain.c    | 7 +++++++
 src/util/vireventthread.c | 6 ++++++
 src/util/viridentity.c    | 6 ++++++
 src/util/virobject.c      | 6 ++++++
 5 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/meson.build b/meson.build
index cecaad199d4c..04646e3a078c 100644
--- a/meson.build
+++ b/meson.build
@@ -405,9 +405,6 @@ cc_flags += [
   # so use this Clang-specific arg to keep it quiet
   '-Wno-typedef-redefinition',
 
-  # Clang complains about casts in G_DEFINE_TYPE(...)
-  '-Wno-incompatible-pointer-types-discards-qualifiers',
-
   # We don't use -Wc++-compat so we have to enable it explicitly
   '-Wjump-misses-init',
 
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 2158080a56ad..3349476cceae 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -330,7 +330,14 @@ struct _qemuDomainLogContext {
     virLogManagerPtr manager;
 };
 
+#pragma clang diagnostic push
+/* Workaround for glib's issue #600 on clang */
+#pragma clang diagnostic ignored "-Wincompatible-pointer-types-discards-qualifiers"
+
 G_DEFINE_TYPE(qemuDomainLogContext, qemu_domain_log_context, G_TYPE_OBJECT);
+
+#pragma clang diagnostic pop
+
 static virClassPtr qemuDomainSaveCookieClass;
 
 static void qemuDomainLogContextFinalize(GObject *obj);
diff --git a/src/util/vireventthread.c b/src/util/vireventthread.c
index 8342f420f666..4e202c94d0f0 100644
--- a/src/util/vireventthread.c
+++ b/src/util/vireventthread.c
@@ -32,8 +32,14 @@ struct _virEventThread {
     GMainLoop *loop;
 };
 
+#pragma clang diagnostic push
+/* Workaround for glib's issue #600 on clang */
+#pragma clang diagnostic ignored "-Wincompatible-pointer-types-discards-qualifiers"
+
 G_DEFINE_TYPE(virEventThread, vir_event_thread, G_TYPE_OBJECT)
 
+#pragma clang diagnostic pop
+
 #define VIR_FROM_THIS VIR_FROM_EVENT
 
 static void
diff --git a/src/util/viridentity.c b/src/util/viridentity.c
index 2cb9042a846a..43f447f629fe 100644
--- a/src/util/viridentity.c
+++ b/src/util/viridentity.c
@@ -50,8 +50,14 @@ struct _virIdentity {
     virTypedParameterPtr params;
 };
 
+#pragma clang diagnostic push
+/* Workaround for glib's issue #600 on clang */
+#pragma clang diagnostic ignored "-Wincompatible-pointer-types-discards-qualifiers"
+
 G_DEFINE_TYPE(virIdentity, vir_identity, G_TYPE_OBJECT)
 
+#pragma clang diagnostic pop
+
 static virThreadLocal virIdentityCurrent;
 
 static void virIdentityFinalize(GObject *obj);
diff --git a/src/util/virobject.c b/src/util/virobject.c
index a6305354c35e..8d1f26618334 100644
--- a/src/util/virobject.c
+++ b/src/util/virobject.c
@@ -53,8 +53,14 @@ struct _virObjectPrivate {
 };
 
 
+#pragma clang diagnostic push
+/* Workaround for glib's issue #600 on clang */
+#pragma clang diagnostic ignored "-Wincompatible-pointer-types-discards-qualifiers"
+
 G_DEFINE_TYPE_WITH_PRIVATE(virObject, vir_object, G_TYPE_OBJECT)
 
+#pragma clang diagnostic pop
+
 #define VIR_OBJECT_NOTVALID(obj) (!obj || !VIR_IS_OBJECT(obj))
 
 #define VIR_OBJECT_USAGE_PRINT_WARNING(anyobj, objclass) \
-- 
2.29.2




More information about the libvir-list mailing list