build: avoid -Wno-format on new-enough gcc

Commit c579d6b added a sledgehammer to silence spurious warnings from
gcc 4.2, but in the process, it also silenced useful warnings from
gcc 4.3 through 4.5.  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),
where the former didn't trip on spurious warnings, and where the latter
two detected a revert of 2b804cf.

* m4/virt-compile-warnings.m4 (-Wno-format): Probe for the actual
spurious message, to once again allow gcc 4.4 to use -Wformat.
(cherry picked from commit 814a8deaa1529e1bc09b5c38e6cd625f9c2fed6b)
This commit is contained in:
Eric Blake 2012-10-02 08:37:00 -06:00 committed by Cole Robinson
parent ccc7671135
commit e302d32f0f

View File

@ -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