diff options
Diffstat (limited to 'config')
-rw-r--r-- | config/commence.am | 2 | ||||
-rw-r--r-- | config/gnu-flags | 98 |
2 files changed, 88 insertions, 12 deletions
diff --git a/config/commence.am b/config/commence.am index a16eee5..830c494 100644 --- a/config/commence.am +++ b/config/commence.am @@ -70,7 +70,7 @@ H5CPP=${DESTDIR}$(bindir)/h5c++ # instead of CFLAGS, as CFLAGS is reserved solely for the user to define. # This applies to FCFLAGS, CXXFLAGS, CPPFLAGS, and LDFLAGS as well. -AM_CFLAGS=@AM_CFLAGS@ @H5_CFLAGS@ +AM_CFLAGS=@AM_CFLAGS@ @H5_CFLAGS@ @H5_ECFLAGS@ AM_FCFLAGS=@AM_FCFLAGS@ @H5_FCFLAGS@ AM_CXXFLAGS=@AM_CXXFLAGS@ @H5_CXXFLAGS@ AM_CPPFLAGS=@AM_CPPFLAGS@ @H5_CPPFLAGS@ diff --git a/config/gnu-flags b/config/gnu-flags index 6355ccf..bc120a8 100644 --- a/config/gnu-flags +++ b/config/gnu-flags @@ -168,12 +168,44 @@ if test "X-gcc" = "X-$cc_vendor"; then # NOTE: Disable the -Wformat-nonliteral from -Wformat=2 here and re-add # it to the developer flags. # - H5_CFLAGS="$H5_CFLAGS -pedantic -Wall -Wextra -Wbad-function-cast -Wc++-compat -Wcast-align" - H5_CFLAGS="$H5_CFLAGS -Wcast-qual -Wconversion -Wdeclaration-after-statement -Wdisabled-optimization -Wfloat-equal" - H5_CFLAGS="$H5_CFLAGS -Wformat=2 -Wno-format-nonliteral -Winit-self -Winvalid-pch -Wmissing-declarations -Wmissing-include-dirs" - H5_CFLAGS="$H5_CFLAGS -Wmissing-prototypes -Wnested-externs -Wold-style-definition -Wpacked" - H5_CFLAGS="$H5_CFLAGS -Wredundant-decls -Wshadow -Wstrict-prototypes -Wswitch-enum -Wswitch-default" - H5_CFLAGS="$H5_CFLAGS -Wundef -Wunused-macros -Wunsafe-loop-optimizations -Wwrite-strings" + H5_CFLAGS="$H5_CFLAGS -pedantic -Wall -Wextra" + H5_ECFLAGS="$H5_ECFLAGS -Werror=bad-function-cast" + H5_ECFLAGS="$H5_ECFLAGS -Werror=cast-align" + H5_CFLAGS="$H5_CFLAGS -Wcast-qual -Wconversion" + H5_ECFLAGS="$H5_ECFLAGS -Werror=declaration-after-statement" + DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS -Wdisabled-optimization" + H5_CFLAGS="$H5_CFLAGS -Wfloat-equal" + H5_CFLAGS="$H5_CFLAGS -Wformat=2 -Wno-format-nonliteral -Winit-self -Winvalid-pch" + H5_ECFLAGS="$H5_ECFLAGS -Werror=missing-declarations" + H5_CFLAGS="$H5_CFLAGS -Wmissing-include-dirs" + H5_ECFLAGS="$H5_ECFLAGS -Werror=missing-prototypes" + H5_ECFLAGS="$H5_ECFLAGS -Werror=nested-externs" + H5_ECFLAGS="$H5_ECFLAGS -Werror=old-style-definition" + H5_ECFLAGS="$H5_ECFLAGS -Werror=packed" + H5_ECFLAGS="$H5_ECFLAGS -Werror=redundant-decls" + H5_ECFLAGS="$H5_ECFLAGS -Werror=shadow" + H5_ECFLAGS="$H5_ECFLAGS -Werror=strict-prototypes" + DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS -Wswitch-default" + DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS -Wswitch-enum" + H5_CFLAGS="$H5_CFLAGS -Wundef" + DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS -Wunused-macros" + DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS -Wunsafe-loop-optimizations" + H5_CFLAGS="$H5_CFLAGS -Wwrite-strings" + + # + # HDF5 code should not trigger the following warnings under any + # circumstances, so ask the compiler to treat them as errors: + # +# H5_ECFLAGS="$H5_ECFLAGS -Werror=discarded-qualifiers" + H5_ECFLAGS="$H5_ECFLAGS -Werror=implicit-function-declaration" + H5_CFLAGS="$H5_CFLAGS -Wmaybe-uninitialized" + H5_ECFLAGS="$H5_ECFLAGS -Werror=pointer-sign" + H5_ECFLAGS="$H5_ECFLAGS -Werror=pointer-to-int-cast" + H5_ECFLAGS="$H5_ECFLAGS -Werror=switch" + H5_ECFLAGS="$H5_ECFLAGS -Werror=unused-but-set-variable" + H5_ECFLAGS="$H5_ECFLAGS -Werror=unused-function" + H5_ECFLAGS="$H5_ECFLAGS -Werror=unused-parameter" + H5_ECFLAGS="$H5_ECFLAGS -Werror=unused-variable" ###################### # Developer warnings # @@ -222,17 +254,34 @@ if test "X-gcc" = "X-$cc_vendor"; then # gcc 4.3 if test $cc_vers_major -ge 5 -o $cc_vers_major -eq 4 -a $cc_vers_minor -ge 3; then - H5_CFLAGS="$H5_CFLAGS -Wlogical-op -Wlarger-than=2560" + H5_CFLAGS="$H5_CFLAGS -Wlogical-op" + # + # Lots of noise, questionable benefit: + # + DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS -Wlarger-than=2560" + # fi # gcc 4.4 if test $cc_vers_major -ge 5 -o $cc_vers_major -eq 4 -a $cc_vers_minor -ge 4; then - H5_CFLAGS="$H5_CFLAGS -Wsync-nand -Wframe-larger-than=16384 -Wpacked-bitfield-compat" + H5_CFLAGS="$H5_CFLAGS -Wsync-nand -Wpacked-bitfield-compat" + # + # Lots of noise, questionable benefit: + # + DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS -Wframe-larger-than=16384" + # fi # gcc 4.5 if test $cc_vers_major -ge 5 -o $cc_vers_major -eq 4 -a $cc_vers_minor -ge 5; then - H5_CFLAGS="$H5_CFLAGS -Wstrict-overflow=5 -Wjump-misses-init -Wunsuffixed-float-constants" + H5_CFLAGS="$H5_CFLAGS -Wstrict-overflow=5 -Wunsuffixed-float-constants" + # + # -Wjump-misses-init makes lots of noise for a questionable benefit. + # Can jumping over an initialization in C cause any harm, if + # the variable is never *used* before it has been initialized? + # + DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS -Wjump-misses-init" + # fi # gcc 4.6 @@ -244,7 +293,17 @@ if test "X-gcc" = "X-$cc_vendor"; then # gcc 4.7 if test $cc_vers_major -ge 5 -o $cc_vers_major -eq 4 -a $cc_vers_minor -ge 7; then - H5_CFLAGS="$H5_CFLAGS -Wstack-usage=8192 -Wvector-operation-performance" + # + # It's not clear that -Wvector-operation-performance warnings are + # actionable. + # + # -Wstack-usage=8192 warnings need better justification; + # if justifiable, should be enabled on a branch and swept up there + # before burdening the whole development team. + # + DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS -Wstack-usage=8192" + DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS -Wvector-operation-performance" + DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS -Wsuggest-attribute=pure -Wsuggest-attribute=noreturn" NO_DEVELOPER_WARNING_CFLAGS="$NO_DEVELOPER_WARNING_CFLAGS -Wno-suggest-attribute=pure -Wno-suggest-attribute=noreturn" fi @@ -263,11 +322,21 @@ if test "X-gcc" = "X-$cc_vendor"; then # gcc 5 if test $cc_vers_major -ge 5; then H5_CFLAGS="$H5_CFLAGS -Warray-bounds=2 -Wc99-c11-compat" + H5_ECFLAGS="$H5_ECFLAGS -Werror=incompatible-pointer-types" fi # gcc 6 if test $cc_vers_major -ge 6; then - H5_CFLAGS="$H5_CFLAGS -Wnull-dereference -Wunused-const-variable -Wduplicated-cond -Whsa -Wnormalized" + H5_CFLAGS="$H5_CFLAGS -Wunused-const-variable -Whsa -Wnormalized" + # + # Unacceptably noisy on HDF5 right now. + # + DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS -Wnull-dereference" + # + # Careful! -Wduplicated-cond, combined with HDF5's heavy use of + # macros, can make a lot of noise. + # + DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS -Wduplicated-cond" fi # gcc 7 @@ -278,6 +347,13 @@ if test "X-gcc" = "X-$cc_vendor"; then # gcc 8 if test $cc_vers_major -ge 8; then + # For GCC 8, promote maybe-initialized warnings to an error. GCC 8 + # reports 0 maybe-uninitialized warnings where earlier versions + # make many false reports. GCC 8 seems to analyze calls to static + # in order to detect initializations that occur there. It's possible + # that GCC 8 only performs that analysis at -O3, though. + H5_ECFLAGS="$H5_ECFLAGS -Werror=maybe-uninitialized" + H5_ECFLAGS="$H5_ECFLAGS -Werror=cast-function-type" DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS -Wstringop-overflow=4 -Wsuggest-attribute=cold -Wsuggest-attribute=malloc" NO_DEVELOPER_WARNING_CFLAGS="$NO_DEVELOPER_WARNING_CFLAGS -Wno-suggest-attribute=cold -Wno-suggest-attribute=malloc" H5_CFLAGS="$H5_CFLAGS -Wattribute-alias -Wcast-align=strict -Wshift-overflow=2" |