Blame m4/manywarnings.m4

Packit Service bc2325
# manywarnings.m4 serial 13
Packit Service bc2325
dnl Copyright (C) 2008-2017 Free Software Foundation, Inc.
Packit Service bc2325
dnl This file is free software; the Free Software Foundation
Packit Service bc2325
dnl gives unlimited permission to copy and/or distribute it,
Packit Service bc2325
dnl with or without modifications, as long as this notice is preserved.
Packit Service bc2325
Packit Service bc2325
dnl From Simon Josefsson
Packit Service bc2325
Packit Service bc2325
# gl_MANYWARN_COMPLEMENT(OUTVAR, LISTVAR, REMOVEVAR)
Packit Service bc2325
# --------------------------------------------------
Packit Service bc2325
# Copy LISTVAR to OUTVAR except for the entries in REMOVEVAR.
Packit Service bc2325
# Elements separated by whitespace.  In set logic terms, the function
Packit Service bc2325
# does OUTVAR = LISTVAR \ REMOVEVAR.
Packit Service bc2325
AC_DEFUN([gl_MANYWARN_COMPLEMENT],
Packit Service bc2325
[
Packit Service bc2325
  gl_warn_set=
Packit Service bc2325
  set x $2; shift
Packit Service bc2325
  for gl_warn_item
Packit Service bc2325
  do
Packit Service bc2325
    case " $3 " in
Packit Service bc2325
      *" $gl_warn_item "*)
Packit Service bc2325
        ;;
Packit Service bc2325
      *)
Packit Service bc2325
        gl_warn_set="$gl_warn_set $gl_warn_item"
Packit Service bc2325
        ;;
Packit Service bc2325
    esac
Packit Service bc2325
  done
Packit Service bc2325
  $1=$gl_warn_set
Packit Service bc2325
])
Packit Service bc2325
Packit Service bc2325
# gl_MANYWARN_ALL_GCC(VARIABLE)
Packit Service bc2325
# -----------------------------
Packit Service bc2325
# Add all documented GCC warning parameters to variable VARIABLE.
Packit Service bc2325
# Note that you need to test them using gl_WARN_ADD if you want to
Packit Service bc2325
# make sure your gcc understands it.
Packit Service bc2325
#
Packit Service bc2325
# The effects of this macro depend on the current language (_AC_LANG).
Packit Service bc2325
AC_DEFUN([gl_MANYWARN_ALL_GCC],
Packit Service bc2325
[_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
Packit Service bc2325
Packit Service bc2325
# Specialization for _AC_LANG = C.
Packit Service bc2325
# Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b.
Packit Service bc2325
m4_defun([gl_MANYWARN_ALL_GCC(C)],
Packit Service bc2325
[
Packit Service bc2325
  AC_LANG_PUSH([C])
Packit Service bc2325
Packit Service bc2325
  dnl First, check for some issues that only occur when combining multiple
Packit Service bc2325
  dnl gcc warning categories.
Packit Service bc2325
  AC_REQUIRE([AC_PROG_CC])
Packit Service bc2325
  if test -n "$GCC"; then
Packit Service bc2325
Packit Service bc2325
    dnl Check if -W -Werror -Wno-missing-field-initializers is supported
Packit Service bc2325
    dnl with the current $CC $CFLAGS $CPPFLAGS.
Packit Service bc2325
    AC_MSG_CHECKING([whether -Wno-missing-field-initializers is supported])
Packit Service bc2325
    AC_CACHE_VAL([gl_cv_cc_nomfi_supported], [
Packit Service bc2325
      gl_save_CFLAGS="$CFLAGS"
Packit Service bc2325
      CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers"
Packit Service bc2325
      AC_COMPILE_IFELSE(
Packit Service bc2325
        [AC_LANG_PROGRAM([[]], [[]])],
Packit Service bc2325
        [gl_cv_cc_nomfi_supported=yes],
Packit Service bc2325
        [gl_cv_cc_nomfi_supported=no])
Packit Service bc2325
      CFLAGS="$gl_save_CFLAGS"])
Packit Service bc2325
    AC_MSG_RESULT([$gl_cv_cc_nomfi_supported])
Packit Service bc2325
Packit Service bc2325
    if test "$gl_cv_cc_nomfi_supported" = yes; then
Packit Service bc2325
      dnl Now check whether -Wno-missing-field-initializers is needed
Packit Service bc2325
      dnl for the { 0, } construct.
Packit Service bc2325
      AC_MSG_CHECKING([whether -Wno-missing-field-initializers is needed])
Packit Service bc2325
      AC_CACHE_VAL([gl_cv_cc_nomfi_needed], [
Packit Service bc2325
        gl_save_CFLAGS="$CFLAGS"
Packit Service bc2325
        CFLAGS="$CFLAGS -W -Werror"
Packit Service bc2325
        AC_COMPILE_IFELSE(
Packit Service bc2325
          [AC_LANG_PROGRAM(
Packit Service bc2325
             [[int f (void)
Packit Service bc2325
               {
Packit Service bc2325
                 typedef struct { int a; int b; } s_t;
Packit Service bc2325
                 s_t s1 = { 0, };
Packit Service bc2325
                 return s1.b;
Packit Service bc2325
               }
Packit Service bc2325
             ]],
Packit Service bc2325
             [[]])],
Packit Service bc2325
          [gl_cv_cc_nomfi_needed=no],
Packit Service bc2325
          [gl_cv_cc_nomfi_needed=yes])
Packit Service bc2325
        CFLAGS="$gl_save_CFLAGS"
Packit Service bc2325
      ])
Packit Service bc2325
      AC_MSG_RESULT([$gl_cv_cc_nomfi_needed])
Packit Service bc2325
    fi
Packit Service bc2325
Packit Service bc2325
    dnl Next, check if -Werror -Wuninitialized is useful with the
Packit Service bc2325
    dnl user's choice of $CFLAGS; some versions of gcc warn that it
Packit Service bc2325
    dnl has no effect if -O is not also used
Packit Service bc2325
    AC_MSG_CHECKING([whether -Wuninitialized is supported])
Packit Service bc2325
    AC_CACHE_VAL([gl_cv_cc_uninitialized_supported], [
Packit Service bc2325
      gl_save_CFLAGS="$CFLAGS"
Packit Service bc2325
      CFLAGS="$CFLAGS -Werror -Wuninitialized"
Packit Service bc2325
      AC_COMPILE_IFELSE(
Packit Service bc2325
        [AC_LANG_PROGRAM([[]], [[]])],
Packit Service bc2325
        [gl_cv_cc_uninitialized_supported=yes],
Packit Service bc2325
        [gl_cv_cc_uninitialized_supported=no])
Packit Service bc2325
      CFLAGS="$gl_save_CFLAGS"])
Packit Service bc2325
    AC_MSG_RESULT([$gl_cv_cc_uninitialized_supported])
Packit Service bc2325
Packit Service bc2325
  fi
Packit Service bc2325
Packit Service bc2325
  # List all gcc warning categories.
Packit Service bc2325
  # To compare this list to your installed GCC's, run this Bash command:
Packit Service bc2325
  #
Packit Service bc2325
  # comm -3 \
Packit Service bc2325
  #  <(sed -n 's/^  *\(-[^ ]*\) .*/\1/p' manywarnings.m4 | sort) \
Packit Service bc2325
  #  <(gcc --help=warnings | sed -n 's/^  \(-[^ ]*\) .*/\1/p' | sort |
Packit Service bc2325
  #      grep -v -x -F -f <(
Packit Service bc2325
  #         awk '/^[^#]/ {print $1}' ../build-aux/gcc-warning.spec))
Packit Service bc2325
Packit Service bc2325
  gl_manywarn_set=
Packit Service bc2325
  for gl_manywarn_item in -fno-common \
Packit Service bc2325
    -W \
Packit Service bc2325
    -Wabi \
Packit Service bc2325
    -Waddress \
Packit Service bc2325
    -Waggressive-loop-optimizations \
Packit Service bc2325
    -Wall \
Packit Service bc2325
    -Wattributes \
Packit Service bc2325
    -Wbad-function-cast \
Packit Service bc2325
    -Wbool-compare \
Packit Service bc2325
    -Wbool-operation \
Packit Service bc2325
    -Wbuiltin-declaration-mismatch \
Packit Service bc2325
    -Wbuiltin-macro-redefined \
Packit Service bc2325
    -Wcast-align \
Packit Service bc2325
    -Wchar-subscripts \
Packit Service bc2325
    -Wchkp \
Packit Service bc2325
    -Wclobbered \
Packit Service bc2325
    -Wcomment \
Packit Service bc2325
    -Wcomments \
Packit Service bc2325
    -Wcoverage-mismatch \
Packit Service bc2325
    -Wcpp \
Packit Service bc2325
    -Wdangling-else \
Packit Service bc2325
    -Wdate-time \
Packit Service bc2325
    -Wdeprecated \
Packit Service bc2325
    -Wdeprecated-declarations \
Packit Service bc2325
    -Wdesignated-init \
Packit Service bc2325
    -Wdisabled-optimization \
Packit Service bc2325
    -Wdiscarded-array-qualifiers \
Packit Service bc2325
    -Wdiscarded-qualifiers \
Packit Service bc2325
    -Wdiv-by-zero \
Packit Service bc2325
    -Wdouble-promotion \
Packit Service bc2325
    -Wduplicated-branches \
Packit Service bc2325
    -Wduplicated-cond \
Packit Service bc2325
    -Wduplicate-decl-specifier \
Packit Service bc2325
    -Wempty-body \
Packit Service bc2325
    -Wendif-labels \
Packit Service bc2325
    -Wenum-compare \
Packit Service bc2325
    -Wexpansion-to-defined \
Packit Service bc2325
    -Wextra \
Packit Service bc2325
    -Wformat-contains-nul \
Packit Service bc2325
    -Wformat-extra-args \
Packit Service bc2325
    -Wformat-nonliteral \
Packit Service bc2325
    -Wformat-security \
Packit Service bc2325
    -Wformat-signedness \
Packit Service bc2325
    -Wformat-y2k \
Packit Service bc2325
    -Wformat-zero-length \
Packit Service bc2325
    -Wframe-address \
Packit Service bc2325
    -Wfree-nonheap-object \
Packit Service bc2325
    -Whsa \
Packit Service bc2325
    -Wignored-attributes \
Packit Service bc2325
    -Wignored-qualifiers \
Packit Service bc2325
    -Wimplicit \
Packit Service bc2325
    -Wimplicit-function-declaration \
Packit Service bc2325
    -Wimplicit-int \
Packit Service bc2325
    -Wincompatible-pointer-types \
Packit Service bc2325
    -Winit-self \
Packit Service bc2325
    -Winline \
Packit Service bc2325
    -Wint-conversion \
Packit Service bc2325
    -Wint-in-bool-context \
Packit Service bc2325
    -Wint-to-pointer-cast \
Packit Service bc2325
    -Winvalid-memory-model \
Packit Service bc2325
    -Winvalid-pch \
Packit Service bc2325
    -Wjump-misses-init \
Packit Service bc2325
    -Wlogical-not-parentheses \
Packit Service bc2325
    -Wlogical-op \
Packit Service bc2325
    -Wmain \
Packit Service bc2325
    -Wmaybe-uninitialized \
Packit Service bc2325
    -Wmemset-elt-size \
Packit Service bc2325
    -Wmemset-transposed-args \
Packit Service bc2325
    -Wmisleading-indentation \
Packit Service bc2325
    -Wmissing-braces \
Packit Service bc2325
    -Wmissing-declarations \
Packit Service bc2325
    -Wmissing-field-initializers \
Packit Service bc2325
    -Wmissing-include-dirs \
Packit Service bc2325
    -Wmissing-parameter-type \
Packit Service bc2325
    -Wmissing-prototypes \
Packit Service bc2325
    -Wmultichar \
Packit Service bc2325
    -Wnarrowing \
Packit Service bc2325
    -Wnested-externs \
Packit Service bc2325
    -Wnonnull \
Packit Service bc2325
    -Wnonnull-compare \
Packit Service bc2325
    -Wnull-dereference \
Packit Service bc2325
    -Wodr \
Packit Service bc2325
    -Wold-style-declaration \
Packit Service bc2325
    -Wold-style-definition \
Packit Service bc2325
    -Wopenmp-simd \
Packit Service bc2325
    -Woverflow \
Packit Service bc2325
    -Woverlength-strings \
Packit Service bc2325
    -Woverride-init \
Packit Service bc2325
    -Wpacked \
Packit Service bc2325
    -Wpacked-bitfield-compat \
Packit Service bc2325
    -Wparentheses \
Packit Service bc2325
    -Wpointer-arith \
Packit Service bc2325
    -Wpointer-compare \
Packit Service bc2325
    -Wpointer-sign \
Packit Service bc2325
    -Wpointer-to-int-cast \
Packit Service bc2325
    -Wpragmas \
Packit Service bc2325
    -Wpsabi \
Packit Service bc2325
    -Wrestrict \
Packit Service bc2325
    -Wreturn-local-addr \
Packit Service bc2325
    -Wreturn-type \
Packit Service bc2325
    -Wscalar-storage-order \
Packit Service bc2325
    -Wsequence-point \
Packit Service bc2325
    -Wshadow \
Packit Service bc2325
    -Wshift-count-negative \
Packit Service bc2325
    -Wshift-count-overflow \
Packit Service bc2325
    -Wshift-negative-value \
Packit Service bc2325
    -Wsizeof-array-argument \
Packit Service bc2325
    -Wsizeof-pointer-memaccess \
Packit Service bc2325
    -Wstack-protector \
Packit Service bc2325
    -Wstrict-aliasing \
Packit Service bc2325
    -Wstrict-overflow \
Packit Service bc2325
    -Wstrict-prototypes \
Packit Service bc2325
    -Wsuggest-attribute=const \
Packit Service bc2325
    -Wsuggest-attribute=format \
Packit Service bc2325
    -Wsuggest-attribute=noreturn \
Packit Service bc2325
    -Wsuggest-attribute=pure \
Packit Service bc2325
    -Wsuggest-final-methods \
Packit Service bc2325
    -Wsuggest-final-types \
Packit Service bc2325
    -Wswitch \
Packit Service bc2325
    -Wswitch-bool \
Packit Service bc2325
    -Wswitch-default \
Packit Service bc2325
    -Wswitch-unreachable \
Packit Service bc2325
    -Wsync-nand \
Packit Service bc2325
    -Wsystem-headers \
Packit Service bc2325
    -Wtautological-compare \
Packit Service bc2325
    -Wtrampolines \
Packit Service bc2325
    -Wtrigraphs \
Packit Service bc2325
    -Wtype-limits \
Packit Service bc2325
    -Wuninitialized \
Packit Service bc2325
    -Wunknown-pragmas \
Packit Service bc2325
    -Wunsafe-loop-optimizations \
Packit Service bc2325
    -Wunused \
Packit Service bc2325
    -Wunused-but-set-parameter \
Packit Service bc2325
    -Wunused-but-set-variable \
Packit Service bc2325
    -Wunused-function \
Packit Service bc2325
    -Wunused-label \
Packit Service bc2325
    -Wunused-local-typedefs \
Packit Service bc2325
    -Wunused-macros \
Packit Service bc2325
    -Wunused-parameter \
Packit Service bc2325
    -Wunused-result \
Packit Service bc2325
    -Wunused-value \
Packit Service bc2325
    -Wunused-variable \
Packit Service bc2325
    -Wvarargs \
Packit Service bc2325
    -Wvariadic-macros \
Packit Service bc2325
    -Wvector-operation-performance \
Packit Service bc2325
    -Wvla \
Packit Service bc2325
    -Wvolatile-register-var \
Packit Service bc2325
    -Wwrite-strings \
Packit Service bc2325
    \
Packit Service bc2325
    ; do
Packit Service bc2325
    gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item"
Packit Service bc2325
  done
Packit Service bc2325
Packit Service bc2325
  # gcc --help=warnings outputs an unusual form for these options; list
Packit Service bc2325
  # them here so that the above 'comm' command doesn't report a false match.
Packit Service bc2325
  # Would prefer "min (PTRDIFF_MAX, SIZE_MAX)", but it must be a literal.
Packit Service bc2325
  # Also, AC_COMPUTE_INT requires it to fit in a long; it is 2**63 on
Packit Service bc2325
  # the only platforms where it does not fit in a long, so make that
Packit Service bc2325
  # a special case.
Packit Service bc2325
  AC_MSG_CHECKING([max safe object size])
Packit Service bc2325
  AC_COMPUTE_INT([gl_alloc_max],
Packit Service bc2325
    [LONG_MAX < (PTRDIFF_MAX < (size_t) -1 ? PTRDIFF_MAX : (size_t) -1)
Packit Service bc2325
     ? -1
Packit Service bc2325
     : PTRDIFF_MAX < (size_t) -1 ? (long) PTRDIFF_MAX : (long) (size_t) -1],
Packit Service bc2325
    [[#include <limits.h>
Packit Service bc2325
      #include <stddef.h>
Packit Service bc2325
      #include <stdint.h>
Packit Service bc2325
    ]],
Packit Service bc2325
    [gl_alloc_max=2147483647])
Packit Service bc2325
  case $gl_alloc_max in
Packit Service bc2325
    -1) gl_alloc_max=9223372036854775807;;
Packit Service bc2325
  esac
Packit Service bc2325
  AC_MSG_RESULT([$gl_alloc_max])
Packit Service bc2325
  gl_manywarn_set="$gl_manywarn_set -Walloc-size-larger-than=$gl_alloc_max"
Packit Service bc2325
  gl_manywarn_set="$gl_manywarn_set -Warray-bounds=2"
Packit Service bc2325
  gl_manywarn_set="$gl_manywarn_set -Wformat-overflow=2"
Packit Service bc2325
  gl_manywarn_set="$gl_manywarn_set -Wformat-truncation=2"
Packit Service bc2325
  gl_manywarn_set="$gl_manywarn_set -Wimplicit-fallthrough=5"
Packit Service bc2325
  gl_manywarn_set="$gl_manywarn_set -Wnormalized=nfc"
Packit Service bc2325
  gl_manywarn_set="$gl_manywarn_set -Wshift-overflow=2"
Packit Service bc2325
  gl_manywarn_set="$gl_manywarn_set -Wstringop-overflow=2"
Packit Service bc2325
  gl_manywarn_set="$gl_manywarn_set -Wunused-const-variable=2"
Packit Service bc2325
  gl_manywarn_set="$gl_manywarn_set -Wvla-larger-than=4031"
Packit Service bc2325
Packit Service bc2325
  # These are needed for older GCC versions.
Packit Service bc2325
  if test -n "$GCC"; then
Packit Service bc2325
    case `($CC --version) 2>/dev/null` in
Packit Service bc2325
      'gcc (GCC) '[[0-3]].* | \
Packit Service bc2325
      'gcc (GCC) '4.[[0-7]].*)
Packit Service bc2325
        gl_manywarn_set="$gl_manywarn_set -fdiagnostics-show-option"
Packit Service bc2325
        gl_manywarn_set="$gl_manywarn_set -funit-at-a-time"
Packit Service bc2325
          ;;
Packit Service bc2325
    esac
Packit Service bc2325
  fi
Packit Service bc2325
Packit Service bc2325
  # Disable specific options as needed.
Packit Service bc2325
  if test "$gl_cv_cc_nomfi_needed" = yes; then
Packit Service bc2325
    gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers"
Packit Service bc2325
  fi
Packit Service bc2325
Packit Service bc2325
  if test "$gl_cv_cc_uninitialized_supported" = no; then
Packit Service bc2325
    gl_manywarn_set="$gl_manywarn_set -Wno-uninitialized"
Packit Service bc2325
  fi
Packit Service bc2325
Packit Service bc2325
  $1=$gl_manywarn_set
Packit Service bc2325
Packit Service bc2325
  AC_LANG_POP([C])
Packit Service bc2325
])
Packit Service bc2325
Packit Service bc2325
# Specialization for _AC_LANG = C++.
Packit Service bc2325
# Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b.
Packit Service bc2325
m4_defun([gl_MANYWARN_ALL_GCC(C++)],
Packit Service bc2325
[
Packit Service bc2325
  gl_MANYWARN_ALL_GCC_CXX_IMPL([$1])
Packit Service bc2325
])