>From a8ce87fa150b318134aed4a97d1b1a8c2757c805 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 15 Jun 2017 13:29:04 -0700 Subject: [PATCH] Pacify clang without munging C source MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * configure.ac (WARN_CFLAGS): With Clang, use -Wno-tautological-compare regardless of --enable-gcc-warnings. (WERROR_CFLAGS): Simplify assignments, and guarantee it’s always set. * lib/strftime.c: Copy from gnulib, reverting Clang-specific change which I hope is no longer needed. * src/emacs.c (main): Revert rlim_t change, as rlim_t is signed on some older non-POSIX hosts. --- configure.ac | 38 +++++++++++++++++++++----------------- lib/strftime.c | 27 +++++++++++---------------- src/emacs.c | 4 ++-- 3 files changed, 34 insertions(+), 35 deletions(-) diff --git a/configure.ac b/configure.ac index 459e314..9069e5b 100644 --- a/configure.ac +++ b/configure.ac @@ -891,6 +891,7 @@ AC_DEFUN [emacs_cv_clang=yes], [emacs_cv_clang=no])]) +WERROR_CFLAGS= # When compiling with GCC, prefer -isystem to -I when including system # include files, to avoid generating useless diagnostics for the files. AS_IF([test $gl_gcc_warnings = no], @@ -900,7 +901,6 @@ AC_DEFUN [ # Turn off some warnings if supported. gl_WARN_ADD([-Wno-switch]) - gl_WARN_ADD([-Wno-tautological-constant-out-of-range-compare]) gl_WARN_ADD([-Wno-pointer-sign]) gl_WARN_ADD([-Wno-string-plus-int]) gl_WARN_ADD([-Wno-unknown-attributes]) @@ -918,8 +918,7 @@ AC_DEFUN ;; esac AS_IF([test $gl_gcc_warnings = yes], - [gl_WARN_ADD([-Werror], [WERROR_CFLAGS])]) - AC_SUBST([WERROR_CFLAGS]) + [WERROR_CFLAGS=-Werror]) nw="$nw -Wduplicated-branches" # Too many false alarms nw="$nw -Wformat-overflow=2" # False alarms due to GCC bug 80776 @@ -961,7 +960,7 @@ AC_DEFUN nw="$nw -Wtype-limits" nw="$nw -Wunused-parameter" - if test $emacs_cv_clang = yes; then + if test "$emacs_cv_clang" = yes; then nw="$nw -Wcast-align" nw="$nw -Wdouble-promotion" nw="$nw -Wmissing-braces" @@ -984,11 +983,9 @@ AC_DEFUN gl_WARN_ADD([-Wno-unused-parameter]) # Too many warnings for now gl_WARN_ADD([-Wno-format-nonliteral]) - # More things that clang is unduly picky about. - if test $emacs_cv_clang = yes; then + # clang is unduly picky about braces. + if test "$emacs_cv_clang" = yes; then gl_WARN_ADD([-Wno-missing-braces]) - gl_WARN_ADD([-Wno-tautological-compare]) - gl_WARN_ADD([-Wno-tautological-constant-out-of-range-compare]) fi # This causes too much noise in the MinGW build @@ -1006,15 +1003,22 @@ AC_DEFUN # define _FORTIFY_SOURCE 2 #endif ]) + ]) - # We use a slightly smaller set of warning options for lib/. - # Remove the following and save the result in GNULIB_WARN_CFLAGS. - nw= - nw="$nw -Wunused-macros" +# clang is unduly picky about these regardless of whether +# --enable-gcc-warnings is specified. +if test "$emacs_cv_clang" = yes; then + gl_WARN_ADD([-Wno-tautological-compare]) + gl_WARN_ADD([-Wno-tautological-constant-out-of-range-compare]) +fi - gl_MANYWARN_COMPLEMENT([GNULIB_WARN_CFLAGS], [$WARN_CFLAGS], [$nw]) - AC_SUBST([GNULIB_WARN_CFLAGS]) - ]) +# Use a slightly smaller set of warning options for lib/. +nw= +nw="$nw -Wunused-macros" +gl_MANYWARN_COMPLEMENT([GNULIB_WARN_CFLAGS], [$WARN_CFLAGS], [$nw]) + +AC_SUBST([WERROR_CFLAGS]) +AC_SUBST([GNULIB_WARN_CFLAGS]) edit_cflags=" s,///*,/,g @@ -1033,7 +1037,7 @@ AC_DEFUN recommended for typical use.])], if test "${enableval}" != "no"; then ac_lto_supported=no - if test $emacs_cv_clang = yes; then + if test "$emacs_cv_clang" = yes; then AC_MSG_CHECKING([whether link-time optimization is supported by clang]) GOLD_PLUGIN=`$CC -print-file-name=LLVMgold.so 2>/dev/null` if test -x "$GOLD_PLUGIN"; then @@ -1062,7 +1066,7 @@ AC_DEFUN AC_MSG_RESULT([$ac_lto_supported]) if test "$ac_lto_supported" = "yes"; then CFLAGS="$CFLAGS $LTO" - if test x$emacs_cv_clang = xyes; then + if test "$emacs_cv_clang" = yes; then AC_MSG_WARN([Please read INSTALL before using link-time optimization with clang]) # WARNING: 'ar --plugin ...' doesn't work without # command, so plugin name is appended to ARFLAGS. diff --git a/lib/strftime.c b/lib/strftime.c index 18c899d..99bee4e 100644 --- a/lib/strftime.c +++ b/lib/strftime.c @@ -1123,23 +1123,18 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize) if (modifier == L_('E')) goto bad_format; - { - /* Use a new variable here instead of reusing number_value - because Clang complains about the self-assignment - generated by DO_NUMBER. */ - ptrdiff_t n = ns; - if (width == -1) - width = 9; - else - { - /* Take an explicit width less than 9 as a precision. */ - int j; - for (j = width; j < 9; j++) - n /= 10; - } + number_value = ns; + if (width == -1) + width = 9; + else + { + /* Take an explicit width less than 9 as a precision. */ + int j; + for (j = width; j < 9; j++) + number_value /= 10; + } - DO_NUMBER (width, n); - } + DO_NUMBER (width, number_value); #endif case L_('n'): diff --git a/src/emacs.c b/src/emacs.c index 08430de..da8df1b 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -832,7 +832,7 @@ main (int argc, char **argv) (https://www.cygwin.com/ml/cygwin/2015-07/msg00096.html). */ struct rlimit rlim; if (getrlimit (RLIMIT_STACK, &rlim) == 0 - && rlim.rlim_cur <= LONG_MAX) + && 0 <= rlim.rlim_cur && rlim.rlim_cur <= LONG_MAX) { rlim_t lim = rlim.rlim_cur; @@ -866,7 +866,7 @@ main (int argc, char **argv) right thing anyway. */ long pagesize = getpagesize (); newlim += pagesize - 1; - if (rlim.rlim_max < newlim) + if (0 <= rlim.rlim_max && rlim.rlim_max < newlim) newlim = rlim.rlim_max; newlim -= newlim % pagesize; -- 2.9.4