[lv_cv_gcc_wlogical_op_broken=yes])
CFLAGS="$save_CFLAGS"])
+ AC_CACHE_CHECK([whether gcc gives bogus warnings for -Wlogical-op],
+ [lv_cv_gcc_wlogical_op_equal_expr_broken], [
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="-O2 -Wlogical-op -Werror"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ #define TEST1 1
+ #define TEST2 TEST1
+ ]], [[
+ int test = 0;
+ return test == TEST1 || test == TEST2;]])],
+ [lv_cv_gcc_wlogical_op_equal_expr_broken=no],
+ [lv_cv_gcc_wlogical_op_equal_expr_broken=yes])
+ CFLAGS="$save_CFLAGS"])
+
# We might fundamentally need some of these disabled forever, but
# ideally we'd turn many of them on
dontwarn="$dontwarn -Wfloat-equal"
AC_DEFINE_UNQUOTED([BROKEN_GCC_WLOGICALOP_STRCHR], 1,
[Define to 1 if gcc -Wlogical-op reports false positives on strchr])
fi
+
+ if test "$gl_cv_warn_c__Wlogical_op" = yes &&
+ test "$lv_cv_gcc_wlogical_op_equal_expr_broken" = yes; then
+ AC_DEFINE_UNQUOTED([BROKEN_GCC_WLOGICALOP_EQUAL_EXPR], 1,
+ [Define to 1 if gcc -Wlogical-op reports false positive 'or' equal expr])
+ fi
])
retry:
ret = write(fdst->fd, bytes, nbytes);
if (ret < 0) {
+ VIR_WARNINGS_NO_WLOGICALOP_EQUAL_EXPR
if (errno == EAGAIN || errno == EWOULDBLOCK) {
+ VIR_WARNINGS_RESET
ret = -2;
} else if (errno == EINTR) {
goto retry;
retry:
ret = read(fdst->fd, bytes, nbytes);
if (ret < 0) {
+ VIR_WARNINGS_NO_WLOGICALOP_EQUAL_EXPR
if (errno == EAGAIN || errno == EWOULDBLOCK) {
+ VIR_WARNINGS_RESET
ret = -2;
} else if (errno == EINTR) {
goto retry;
_Pragma ("GCC diagnostic push")
# endif
+/* Workaround bogus GCC 6.0 for logical 'or' equal expression warnings.
+ * (GCC bz 69602) */
+# if BROKEN_GCC_WLOGICALOP_EQUAL_EXPR
+# define VIR_WARNINGS_NO_WLOGICALOP_EQUAL_EXPR \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wlogical-op\"")
+# else
+# define VIR_WARNINGS_NO_WLOGICALOP_EQUAL_EXPR \
+ _Pragma ("GCC diagnostic push")
+# endif
+
# define VIR_WARNINGS_RESET \
_Pragma ("GCC diagnostic pop")
# else
# define VIR_WARNINGS_NO_CAST_ALIGN
# define VIR_WARNINGS_NO_PRINTF
+# define VIR_WARNINGS_NO_WLOGICALOP_EQUAL_EXPR
# define VIR_WARNINGS_RESET
# endif
agent_identity)))
return 0; /* key accepted */
+ VIR_WARNINGS_NO_WLOGICALOP_EQUAL_EXPR
if (ret != LIBSSH2_ERROR_AUTHENTICATION_FAILED &&
ret != LIBSSH2_ERROR_PUBLICKEY_UNRECOGNIZED &&
ret != LIBSSH2_ERROR_PUBLICKEY_UNVERIFIED) {
+ VIR_WARNINGS_RESET
libssh2_session_last_error(sess->session, &errmsg, NULL, 0);
virReportError(VIR_ERR_AUTH_FAILED,
_("failed to authenticate using SSH agent: %s"),
priv->password)) == 0)
return 0; /* success */
+ VIR_WARNINGS_NO_WLOGICALOP_EQUAL_EXPR
if (priv->password ||
ret == LIBSSH2_ERROR_PUBLICKEY_UNRECOGNIZED ||
ret == LIBSSH2_ERROR_AUTHENTICATION_FAILED) {
+ VIR_WARNINGS_RESET
libssh2_session_last_error(sess->session, &errmsg, NULL, 0);
virReportError(VIR_ERR_AUTH_FAILED,
_("authentication with private key '%s' "
"has failed: %s"),
priv->filename, errmsg);
+ VIR_WARNINGS_NO_WLOGICALOP_EQUAL_EXPR
if (ret == LIBSSH2_ERROR_PUBLICKEY_UNRECOGNIZED ||
ret == LIBSSH2_ERROR_AUTHENTICATION_FAILED)
return 1;
else
return -1;
+ VIR_WARNINGS_RESET
}
return 0;
* hopefully sets one of the necessary SELinux virt_use_{nfs,usb,pci}
* boolean tunables to allow it ...
*/
+ VIR_WARNINGS_NO_WLOGICALOP_EQUAL_EXPR
if (setfilecon_errno != EOPNOTSUPP && setfilecon_errno != ENOTSUP &&
setfilecon_errno != EROFS) {
+ VIR_WARNINGS_RESET
virReportSystemError(setfilecon_errno,
_("unable to set security context '%s' on '%s'"),
tcon, path);