64 lines
2.4 KiB
Diff
64 lines
2.4 KiB
Diff
From 5159c34ea8923bf0c17fd31e183c5803b72b97f3 Mon Sep 17 00:00:00 2001
|
||
From: Thomas Haller <thaller@redhat.com>
|
||
Date: Mon, 5 Feb 2018 13:10:24 +0100
|
||
Subject: [PATCH 2/2] ovs: fix compiler error for passing NMDevice pointer to
|
||
NM_DEVICE_OVS_INTERFACE_GET_PRIVATE()
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
NM_DEVICE_OVS_INTERFACE_GET_PRIVATE() is implemented via the _NM_GET_PRIVATE()
|
||
macro. This macro uses C11's _Generic() to provide additional compiler checks
|
||
when casting from an incompatible pointer type.
|
||
|
||
As such,
|
||
|
||
NMDevice *device = ...;
|
||
NMDeviceOvsInterfacePrivate *priv;
|
||
|
||
priv = NM_DEVICE_OVS_INTERFACE_GET_PRIVATE (device);
|
||
|
||
causes a compilation error:
|
||
|
||
error: ‘_Generic’ selector of type ‘NMDevice * {aka struct _NMDevice *}’ is not compatible with any association
|
||
|
||
One workaround would be to cast the pointer first:
|
||
|
||
priv = NM_DEVICE_OVS_INTERFACE_GET_PRIVATE ((NMDeviceOvsInterface *) device);
|
||
|
||
A better fix is to mark NMDevice as a compatible pointer in _NM_GET_PRIVATE(),
|
||
which this patch does.
|
||
|
||
Previously, this went unnoticed, because due to bug "a43bf3388 build: fix configure
|
||
check for CC support of _Generic() and __auto_type", we failed to detect support
|
||
for _Generic() when compiling with -Werror. That essentially disables this check,
|
||
and NM_DEVICE_OVS_INTERFACE_GET_PRIVATE() would do a direct cast.
|
||
|
||
A workaround for this build failure might be to build with -Werror, which accidentally
|
||
results in not using _Generic().
|
||
|
||
https://bugzilla.gnome.org/show_bug.cgi?id=793183
|
||
|
||
Fixes: 8ad310f8e3cb0157cfa5fa8ff10f313555cf8e3c
|
||
(cherry picked from commit 782578122c6cb23bdbee0b01eddceee1b967a673)
|
||
---
|
||
src/devices/ovs/nm-device-ovs-interface.c | 2 +-
|
||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||
|
||
diff --git a/src/devices/ovs/nm-device-ovs-interface.c b/src/devices/ovs/nm-device-ovs-interface.c
|
||
index e746a3fd2..ce32c2dd7 100644
|
||
--- a/src/devices/ovs/nm-device-ovs-interface.c
|
||
+++ b/src/devices/ovs/nm-device-ovs-interface.c
|
||
@@ -50,7 +50,7 @@ struct _NMDeviceOvsInterfaceClass {
|
||
|
||
G_DEFINE_TYPE (NMDeviceOvsInterface, nm_device_ovs_interface, NM_TYPE_DEVICE)
|
||
|
||
-#define NM_DEVICE_OVS_INTERFACE_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDeviceOvsInterface, NM_IS_DEVICE_OVS_INTERFACE)
|
||
+#define NM_DEVICE_OVS_INTERFACE_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMDeviceOvsInterface, NM_IS_DEVICE_OVS_INTERFACE, NMDevice)
|
||
|
||
/*****************************************************************************/
|
||
|
||
--
|
||
2.14.3
|
||
|