This would have detected the bug in commit 38ad33931 (Aug 09), which
we missed until commit f828ca35 (Jul 10); over 11 months later.
However, on Fedora 13, it also triggers LOTS of warnings from
the libcurl-devel header for one file:
esx/esx_vi.c: In function 'esxVI_CURL_Perform':
esx/esx_vi.c:232: error: logical '&&' with non-zero constant will always
evaluate as true [-Wlogical-op]
esx/esx_vi.c:232: error: logical '&&' with non-zero constant will always
evaluate as true [-Wlogical-op]
esx/esx_vi.c:232: error: logical '&&' with non-zero constant will always
evaluate as true [-Wlogical-op]
...
I figure the gross hack to disable the warnings in the third-party
code, along with the reduction in type-safety in just esx_vi.c,
is worth the improved compiler checking throughout the rest of libvirt.
* acinclude.m4 (--enable-compile-warnings=error): Add
-Wlogical-op.
* src/esx/esx_vi.c (includes): Hack around broken libcurl-devel
header, to avoid compilation warning.
Suggested by Daniel P. Berrange.
---
In response to
https://www.redhat.com/archives/libvir-list/2010-July/msg00497.html
and fixing some long lines while I was at it.
acinclude.m4 | 16 +++++++++++++---
src/esx/esx_vi.c | 10 ++++++++++
2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/acinclude.m4 b/acinclude.m4
index 8c97184..838ec46 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -36,9 +36,19 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
try_compiler_flags="-Wall -Wformat -Wformat-security -Wmissing-prototypes
$common_flags"
;;
maximum|error)
- try_compiler_flags="-Wall -Wformat -Wformat-security -Wmissing-prototypes
-Wnested-externs -Wpointer-arith"
- try_compiler_flags="$try_compiler_flags -Wextra -Wshadow -Wcast-align
-Wwrite-strings -Waggregate-return"
- try_compiler_flags="$try_compiler_flags -Wstrict-prototypes -Winline
-Wredundant-decls -Wno-sign-compare"
+ try_compiler_flags="-Wall -Wformat -Wformat-security"
+ try_compiler_flags="$try_compiler_flags -Wmissing-prototypes"
+ try_compiler_flags="$try_compiler_flags -Wnested-externs "
+ try_compiler_flags="$try_compiler_flags -Wpointer-arith"
+ try_compiler_flags="$try_compiler_flags -Wextra -Wshadow"
+ try_compiler_flags="$try_compiler_flags -Wcast-align"
+ try_compiler_flags="$try_compiler_flags -Wwrite-strings"
+ try_compiler_flags="$try_compiler_flags -Waggregate-return"
+ try_compiler_flags="$try_compiler_flags -Wstrict-prototypes"
+ try_compiler_flags="$try_compiler_flags -Winline"
+ try_compiler_flags="$try_compiler_flags -Wredundant-decls"
+ try_compiler_flags="$try_compiler_flags -Wno-sign-compare"
+ try_compiler_flags="$try_compiler_flags -Wlogical-op"
try_compiler_flags="$try_compiler_flags $common_flags"
if test "$enable_compile_warnings" = "error" ; then
try_compiler_flags="$try_compiler_flags -Werror"
diff --git a/src/esx/esx_vi.c b/src/esx/esx_vi.c
index 8c43d67..9ea8d24 100644
--- a/src/esx/esx_vi.c
+++ b/src/esx/esx_vi.c
@@ -36,6 +36,16 @@
#include "esx_vi_methods.h"
#include "esx_util.h"
+
+/* XXX "esx_vi.h" includes <curl/curl.h>; as of
+ * libcurl-devel-7.20.1-3.fc13.x86_64, curl ships a version of this
+ * header that #defines several wrapper macros around underlying
+ * functions to add type safety for gcc only. However, these macros
+ * spuriously trip gcc's -Wlogical-op warning. Avoid the warning by
+ * nuking the wrappers; even if it removes some type-check safety. */
+# undef curl_easy_getinfo
+# undef curl_easy_setopt
+
#define VIR_FROM_THIS VIR_FROM_ESX
--
1.7.1.1