Blame m4/manywarnings.m4

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