[libvirt] [PATCH] build: avoid -Wno-format on new-enough gcc

Eric Blake eblake at redhat.com
Tue Oct 2 14:55:45 UTC 2012


Commit c579d6b added a sledgehammer to silence spurious warnings from
gcc 4.2, but in the process, it also silenced useful warnings from
newer gcc (such as 4.4).  As a result, a bug slipped in to commit 0caccb58.

Tested with FreeBSD (gcc 4.2.1), RHEL 6.3 (gcc 4.4), and F17 (gcc 4.7.2).

* m4/virt-compile-warnings.m4 (-Wno-format): Probe for the actual
spurious message, to once again allow gcc 4.4 to use -Wformat.
---
 m4/virt-compile-warnings.m4 | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/m4/virt-compile-warnings.m4 b/m4/virt-compile-warnings.m4
index d1173eb..f1b8f39 100644
--- a/m4/virt-compile-warnings.m4
+++ b/m4/virt-compile-warnings.m4
@@ -60,6 +60,23 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
     # gcc 4.4.6 complains this is C++ only; gcc 4.7.0 implies this from -Wall
     dontwarn="$dontwarn -Wenum-compare"

+    # gcc 4.2 treats attribute(format) as an implicit attribute(nonnull),
+    # which triggers spurious warnings for our usage
+    AC_CACHE_CHECK([whether gcc -Wformat allows NULL strings],
+      [lv_cv_gcc_wformat_null_works], [
+      save_CFLAGS=$CFLAGS
+      CFLAGS='-Wunknown-pragmas -Werror -Wformat'
+      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+        #include <stddef.h>
+        static __attribute__ ((__format__ (__printf__, 1, 2))) int
+        foo (const char *fmt, ...) { return !fmt; }
+      ]], [[
+        return foo(NULL);
+      ]])],
+      [lv_cv_gcc_wformat_null_works=yes],
+      [lv_cv_gcc_wformat_null_works=no])
+      CFLAGS=$save_CFLAGS])
+
     # Gnulib uses '#pragma GCC diagnostic push' to silence some
     # warnings, but older gcc doesn't support this.
     AC_CACHE_CHECK([whether pragma GCC diagnostic push works],
@@ -117,7 +134,7 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
     # ATTRIBUTE_FMT_PRINT, which causes -Wformat failure on our
     # intentional use of virReportError(code, NULL).
     gl_WARN_ADD([-Wno-format-nonliteral])
-    if test $lv_cv_gcc_pragma_push_works = no; then
+    if test $lv_cv_gcc_wformat_null_works = no; then
       gl_WARN_ADD([-Wno-format])
     fi

-- 
1.7.11.4




More information about the libvir-list mailing list