]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
build: avoid warnings from gcc 4.2.1
authorEric Blake <eblake@redhat.com>
Wed, 5 Sep 2012 17:40:31 +0000 (11:40 -0600)
committerEric Blake <eblake@redhat.com>
Wed, 5 Sep 2012 18:05:55 +0000 (12:05 -0600)
OpenBSD ships with gcc 4.2.1, which annoyingly treats all format
strings as though they were also attribute((nonnull)).  The two
concepts are orthogonal, though, as evidenced by the number of
spurious warnings it generates on uses where we know that
virReportError specifically handles NULL instead of a format
string; worse, since we now force -Werror on git builds, it
prevents development builds on OpenBSD.

I hate to do this, as it disables ALL format checking on older
gcc, and therefore misses out on some useful checks (code that
happened to compile on Linux may still have type mismatches
when compiled on other platforms, as evidenced by the number
of times I have fixed formatting mismatches for uid_t as found
by warnings on Cygwin), but I don't see any other way to keep
-Werror alive and still compile on OpenBSD.

A more invasive change would be to make virReportError() mark
its format attribute as nonnull, and fix (a lot of) fallout;
we may end up doing that anyways as part of danpb's error
refactoring improvements, but not today.

* src/internal.h (ATTRIBUTE_FMT_PRINTF): Use preferred spellings.
* m4/virt-compile-warnings.m4 (-Wformat): Disable on older gcc.

m4/virt-compile-warnings.m4
src/internal.h

index 26f61345905529b363b678488899e10038ec5179..c3ff9622e6cc62c397e88e988f62f8ca23886b8b 100644 (file)
@@ -110,8 +110,14 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
     gl_WARN_ADD([-Wjump-misses-init])
 
     # GNULIB turns on -Wformat=2 which implies -Wformat-nonliteral,
-    # so we need to manually re-exclude it.
+    # so we need to manually re-exclude it.  Also, older gcc 4.2
+    # added an implied ATTRIBUTE_NONNULL on any parameter marked
+    # 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
+      gl_WARN_ADD([-Wno-format])
+    fi
 
     # This should be < 256 really. Currently we're down to 4096,
     # but using 1024 bytes sized buffers (mostly for virStrerror)
index 832a9318cd57bbe03c78faf47c65cfe7ed10444e..02fdb8d25b23e827b3273cf61340fbeaf4519a55 100644 (file)
  */
 #  ifndef ATTRIBUTE_FMT_PRINTF
 #   if __GNUC_PREREQ (4, 4)
-#    define ATTRIBUTE_FMT_PRINTF(fmtpos,argpos) __attribute__((__format__ (gnu_printf, fmtpos,argpos)))
+#    define ATTRIBUTE_FMT_PRINTF(fmtpos,argpos) \
+    __attribute__((__format__ (__gnu_printf__, fmtpos, argpos)))
 #   else
-#    define ATTRIBUTE_FMT_PRINTF(fmtpos,argpos) __attribute__((__format__ (printf, fmtpos,argpos)))
+#    define ATTRIBUTE_FMT_PRINTF(fmtpos,argpos) \
+    __attribute__((__format__ (__printf__, fmtpos, argpos)))
 #   endif
 #  endif