Fix build
This commit is contained in:
parent
dc410627f6
commit
8b792ad0ef
@ -0,0 +1,48 @@
|
||||
From 640673f75ba4bcc40989b3bf1c03738b562ea2fc Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Haller <thaller@redhat.com>
|
||||
Date: Sun, 28 Jan 2018 08:51:25 +0100
|
||||
Subject: [PATCH 1/2] build: fix configure check for CC support of _Generic()
|
||||
and __auto_type
|
||||
|
||||
autotools' AC_LANG_PROGRAM() generates a main() function which triggers
|
||||
a compiler warning (for which we fail with -WError).
|
||||
|
||||
conftest.c:92:1: error: function declaration isn't a prototype [-Werror=strict-prototypes]
|
||||
main ()
|
||||
^~~~
|
||||
cc1: all warnings being treated as errors
|
||||
|
||||
Fixes: 557d83bf2ddf832828a9b85ffffcad0b7d88272a
|
||||
(cherry picked from commit a43bf33888a639671bb7b7c7d37f416f1ef8dd79)
|
||||
---
|
||||
configure.ac | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index e263738f5..ab2ded77b 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -1224,16 +1224,16 @@ fi
|
||||
AC_SUBST(SANITIZERS, [$sanitizers])
|
||||
|
||||
AC_MSG_CHECKING([CC support C11 _Generic()])
|
||||
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[int foo(void); int foo() { int a = 0; int b = _Generic (a, int: 4); return b + a; }]],
|
||||
- [[foo();]])],
|
||||
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int foo(void); int foo() { int a = 0; int b = _Generic (a, int: 4); return b + a; }]],
|
||||
+ [[foo();]])],
|
||||
[cc_support_generic=1],
|
||||
[cc_support_generic=0])
|
||||
AC_MSG_RESULT($cc_support_generic)
|
||||
AC_DEFINE_UNQUOTED(_NM_CC_SUPPORT_GENERIC, $cc_support_generic, [Define whether the compiler supports C11 _Generic()])
|
||||
|
||||
AC_MSG_CHECKING([CC support gcc __auto_type])
|
||||
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[int foo(void); int foo() { int a = 0; __auto_type b = a; return b + a; }]],
|
||||
- [[foo();]])],
|
||||
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int foo(void); int foo() { int a = 0; __auto_type b = a; return b + a; }]],
|
||||
+ [[foo();]])],
|
||||
[cc_support_auto_type=1],
|
||||
[cc_support_auto_type=0])
|
||||
AC_MSG_RESULT($cc_support_auto_type)
|
||||
--
|
||||
2.14.3
|
||||
|
@ -0,0 +1,63 @@
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user