From 8b792ad0ef54bc53824f6b7228bbccc0f7af5a98 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Tue, 6 Feb 2018 17:30:36 +0100 Subject: [PATCH] Fix build --- ...ure-check-for-CC-support-of-_Generic.patch | 48 ++++++++++++++ ...-error-for-passing-NMDevice-pointer-.patch | 63 +++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 0001-build-fix-configure-check-for-CC-support-of-_Generic.patch create mode 100644 0002-ovs-fix-compiler-error-for-passing-NMDevice-pointer-.patch diff --git a/0001-build-fix-configure-check-for-CC-support-of-_Generic.patch b/0001-build-fix-configure-check-for-CC-support-of-_Generic.patch new file mode 100644 index 0000000..bb73408 --- /dev/null +++ b/0001-build-fix-configure-check-for-CC-support-of-_Generic.patch @@ -0,0 +1,48 @@ +From 640673f75ba4bcc40989b3bf1c03738b562ea2fc Mon Sep 17 00:00:00 2001 +From: Thomas Haller +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 + diff --git a/0002-ovs-fix-compiler-error-for-passing-NMDevice-pointer-.patch b/0002-ovs-fix-compiler-error-for-passing-NMDevice-pointer-.patch new file mode 100644 index 0000000..9a397e8 --- /dev/null +++ b/0002-ovs-fix-compiler-error-for-passing-NMDevice-pointer-.patch @@ -0,0 +1,63 @@ +From 5159c34ea8923bf0c17fd31e183c5803b72b97f3 Mon Sep 17 00:00:00 2001 +From: Thomas Haller +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 +