From 9097e5d14ff817a85bf9e519409e78df9d71e03d Mon Sep 17 00:00:00 2001 From: Eric Christopher Date: Fri, 7 Aug 2015 16:44:47 +0000 Subject: [PATCH] We're actually -Wmissing-field-initializers clean thanks to the cmake build so check and turn on -Wmissing-field-initializers. While there, reorganize the conditional warning code based on compiler to be a bit more obvious and inside a switch statement. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244330 91177308-0d34-0410-b5e6-96231b3b80d8 --- Makefile.config.in | 4 ++-- Makefile.rules | 2 +- autoconf/configure.ac | 46 ++++++++++++++++++++++++------------------- configure | 42 +++++++++++++++++++++++---------------- 4 files changed, 54 insertions(+), 40 deletions(-) diff --git a/Makefile.config.in b/Makefile.config.in index 9df9834f4db..5ca264320c5 100644 --- a/Makefile.config.in +++ b/Makefile.config.in @@ -396,8 +396,8 @@ endif BINUTILS_INCDIR := @BINUTILS_INCDIR@ # Optional flags supported by the compiler -# -Wno-missing-field-initializers -NO_MISSING_FIELD_INITIALIZERS = @NO_MISSING_FIELD_INITIALIZERS@ +# -Wmissing-field-initializers +MISSING_FIELD_INITIALIZERS = @MISSING_FIELD_INITIALIZERS@ # -Wno-variadic-macros NO_VARIADIC_MACROS = @NO_VARIADIC_MACROS@ # -Wcovered-switch-default diff --git a/Makefile.rules b/Makefile.rules index 24cac3b3765..42d6a96cf52 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -686,7 +686,7 @@ endif CompileCommonOpts += -Wall -W -Wno-unused-parameter -Wwrite-strings \ $(EXTRA_OPTIONS) $(COVERED_SWITCH_DEFAULT) \ $(NO_UNINITIALIZED) $(NO_MAYBE_UNINITIALIZED) \ - $(NO_MISSING_FIELD_INITIALIZERS) $(NO_COMMENT) + $(MISSING_FIELD_INITIALIZERS) $(NO_COMMENT) # Enable cast-qual for C++; the workaround is to use const_cast. CXX.Flags += -Wcast-qual diff --git a/autoconf/configure.ac b/autoconf/configure.ac index 0451f7e3cfa..26f6ee46889 100644 --- a/autoconf/configure.ac +++ b/autoconf/configure.ac @@ -1548,25 +1548,31 @@ AC_MSG_RESULT([ok]) dnl Check optional compiler flags. AC_MSG_CHECKING([optional compiler flags]) -CXX_FLAG_CHECK(NO_VARIADIC_MACROS, [-Wno-variadic-macros]) -CXX_FLAG_CHECK(NO_MISSING_FIELD_INITIALIZERS, [-Wno-missing-field-initializers]) -CXX_FLAG_CHECK(COVERED_SWITCH_DEFAULT, [-Wcovered-switch-default]) - -dnl GCC's potential uninitialized use analysis is weak and presents lots of -dnl false positives, so disable it. -NO_UNINITIALIZED= -NO_MAYBE_UNINITIALIZED= -if test "$GXX" = "yes" -then - CXX_FLAG_CHECK(NO_MAYBE_UNINITIALIZED, [-Wno-maybe-uninitialized]) - dnl gcc 4.7 introduced -Wmaybe-uninitialized to distinguish cases which are - dnl known to be uninitialized from cases which might be uninitialized. We - dnl still want to catch the first kind of errors. - if test -z "$NO_MAYBE_UNINITIALIZED" - then - CXX_FLAG_CHECK(NO_UNINITIALIZED, [-Wno-uninitialized]) - fi -fi +case "$llvm_cv_cxx_compiler" in + clang) + CXX_FLAG_CHECK(NO_VARIADIC_MACROS, [-Wno-variadic-macros]) + CXX_FLAG_CHECK(MISSING_FIELD_INITIALIZERS, [-Wmissing-field-initializers]) + CXX_FLAG_CHECK(COVERED_SWITCH_DEFAULT, [-Wcovered-switch-default]) + ;; + gcc) + dnl If we're using gcc check for -Wno-missing-field-initializers as gcc will warn + dnl on plain open brace initializations. clang won't so use -Wmissing-field-initializers + dnl there. + CXX_FLAG_CHECK(MISSING_FIELD_INITIALIZERS, [-Wno-missing-field-initializers]) + CXX_FLAG_CHECK(NO_VARIADIC_MACROS, [-Wno-variadic-macros]) + CXX_FLAG_CHECK(COVERED_SWITCH_DEFAULT, [-Wcovered-switch-default]) + CXX_FLAG_CHECK(NO_MAYBE_UNINITIALIZED, [-Wno-maybe-uninitialized]) + dnl gcc 4.7 introduced -Wmaybe-uninitialized to distinguish cases which are + dnl known to be uninitialized from cases which might be uninitialized. We + dnl still want to catch the first kind of errors. + if test -z "$NO_MAYBE_UNINITIALIZED" + then + CXX_FLAG_CHECK(NO_UNINITIALIZED, [-Wno-uninitialized]) + fi + ;; + unknown) + ;; +esac dnl Check for misbehaving -Wcomment (gcc-4.7 has this) and maybe add dnl -Wno-comment to the flags. @@ -1587,7 +1593,7 @@ int main() { return 0; } AC_SUBST(NO_COMMENT, [$no_comment]) CXXFLAGS="$llvm_cv_old_cxxflags" -AC_MSG_RESULT([$NO_VARIADIC_MACROS $NO_MISSING_FIELD_INITIALIZERS $COVERED_SWITCH_DEFAULT $NO_UNINITIALIZED $NO_MAYBE_UNINITIALIZED $NO_COMMENT]) +AC_MSG_RESULT([$NO_VARIADIC_MACROS $MISSING_FIELD_INITIALIZERS $COVERED_SWITCH_DEFAULT $NO_UNINITIALIZED $NO_MAYBE_UNINITIALIZED $NO_COMMENT]) AC_ARG_WITH([python], [AS_HELP_STRING([--with-python], [path to python])], diff --git a/configure b/configure index 5b5cbf25be0..b5ccaff17ce 100755 --- a/configure +++ b/configure @@ -777,7 +777,7 @@ GAS HAVE_LINK_VERSION_SCRIPT EGREP NO_VARIADIC_MACROS -NO_MISSING_FIELD_INITIALIZERS +MISSING_FIELD_INITIALIZERS COVERED_SWITCH_DEFAULT NO_MAYBE_UNINITIALIZED NO_UNINITIALIZED @@ -8379,25 +8379,33 @@ echo "${ECHO_T}ok" >&6; } { echo "$as_me:$LINENO: checking optional compiler flags" >&5 echo $ECHO_N "checking optional compiler flags... $ECHO_C" >&6; } -NO_VARIADIC_MACROS=`$CXX -Werror -Wvariadic-macros -fsyntax-only -xc /dev/null 2>/dev/null && echo -Wno-variadic-macros` +case "$llvm_cv_cxx_compiler" in + clang) + NO_VARIADIC_MACROS=`$CXX -Werror -Wvariadic-macros -fsyntax-only -xc /dev/null 2>/dev/null && echo -Wno-variadic-macros` -NO_MISSING_FIELD_INITIALIZERS=`$CXX -Werror -Wmissing-field-initializers -fsyntax-only -xc /dev/null 2>/dev/null && echo -Wno-missing-field-initializers` + MISSING_FIELD_INITIALIZERS=`$CXX -Werror -Wmissing-field-initializers -fsyntax-only -xc /dev/null 2>/dev/null && echo -Wmissing-field-initializers` -COVERED_SWITCH_DEFAULT=`$CXX -Werror -Wcovered-switch-default -fsyntax-only -xc /dev/null 2>/dev/null && echo -Wcovered-switch-default` + COVERED_SWITCH_DEFAULT=`$CXX -Werror -Wcovered-switch-default -fsyntax-only -xc /dev/null 2>/dev/null && echo -Wcovered-switch-default` + ;; + gcc) + MISSING_FIELD_INITIALIZERS=`$CXX -Werror -Wmissing-field-initializers -fsyntax-only -xc /dev/null 2>/dev/null && echo -Wno-missing-field-initializers` -NO_UNINITIALIZED= -NO_MAYBE_UNINITIALIZED= -if test "$GXX" = "yes" -then - NO_MAYBE_UNINITIALIZED=`$CXX -Werror -Wmaybe-uninitialized -fsyntax-only -xc /dev/null 2>/dev/null && echo -Wno-maybe-uninitialized` + NO_VARIADIC_MACROS=`$CXX -Werror -Wvariadic-macros -fsyntax-only -xc /dev/null 2>/dev/null && echo -Wno-variadic-macros` - if test -z "$NO_MAYBE_UNINITIALIZED" - then - NO_UNINITIALIZED=`$CXX -Werror -Wuninitialized -fsyntax-only -xc /dev/null 2>/dev/null && echo -Wno-uninitialized` + COVERED_SWITCH_DEFAULT=`$CXX -Werror -Wcovered-switch-default -fsyntax-only -xc /dev/null 2>/dev/null && echo -Wcovered-switch-default` - fi -fi + NO_MAYBE_UNINITIALIZED=`$CXX -Werror -Wmaybe-uninitialized -fsyntax-only -xc /dev/null 2>/dev/null && echo -Wno-maybe-uninitialized` + + if test -z "$NO_MAYBE_UNINITIALIZED" + then + NO_UNINITIALIZED=`$CXX -Werror -Wuninitialized -fsyntax-only -xc /dev/null 2>/dev/null && echo -Wno-uninitialized` + + fi + ;; + unknown) + ;; +esac no_comment= llvm_cv_old_cxxflags="$CXXFLAGS" @@ -8464,8 +8472,8 @@ NO_COMMENT=$no_comment CXXFLAGS="$llvm_cv_old_cxxflags" -{ echo "$as_me:$LINENO: result: $NO_VARIADIC_MACROS $NO_MISSING_FIELD_INITIALIZERS $COVERED_SWITCH_DEFAULT $NO_UNINITIALIZED $NO_MAYBE_UNINITIALIZED $NO_COMMENT" >&5 -echo "${ECHO_T}$NO_VARIADIC_MACROS $NO_MISSING_FIELD_INITIALIZERS $COVERED_SWITCH_DEFAULT $NO_UNINITIALIZED $NO_MAYBE_UNINITIALIZED $NO_COMMENT" >&6; } +{ echo "$as_me:$LINENO: result: $NO_VARIADIC_MACROS $MISSING_FIELD_INITIALIZERS $COVERED_SWITCH_DEFAULT $NO_UNINITIALIZED $NO_MAYBE_UNINITIALIZED $NO_COMMENT" >&5 +echo "${ECHO_T}$NO_VARIADIC_MACROS $MISSING_FIELD_INITIALIZERS $COVERED_SWITCH_DEFAULT $NO_UNINITIALIZED $NO_MAYBE_UNINITIALIZED $NO_COMMENT" >&6; } # Check whether --with-python was given. @@ -18653,7 +18661,7 @@ GAS!$GAS$ac_delim HAVE_LINK_VERSION_SCRIPT!$HAVE_LINK_VERSION_SCRIPT$ac_delim EGREP!$EGREP$ac_delim NO_VARIADIC_MACROS!$NO_VARIADIC_MACROS$ac_delim -NO_MISSING_FIELD_INITIALIZERS!$NO_MISSING_FIELD_INITIALIZERS$ac_delim +MISSING_FIELD_INITIALIZERS!$MISSING_FIELD_INITIALIZERS$ac_delim COVERED_SWITCH_DEFAULT!$COVERED_SWITCH_DEFAULT$ac_delim NO_MAYBE_UNINITIALIZED!$NO_MAYBE_UNINITIALIZED$ac_delim NO_UNINITIALIZED!$NO_UNINITIALIZED$ac_delim -- 2.34.1