]> git.eshelyaron.com Git - emacs.git/commitdiff
Port --enable-gcc-warnings to clang.
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 18 May 2013 05:32:17 +0000 (22:32 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 18 May 2013 05:32:17 +0000 (22:32 -0700)
* configure.ac (nw): Remove obsolescent warnings.
These aren't needed for clang, or for gcc for that matter.
(emacs_cv_clang): New var, which tests for clang.
Omit warnings that clang is too picky about.
(GLIB_DISABLE_DEPRECATION_WARNINGS): Define this;
needed for Ubuntu 13.04 + clang + --enable-gcc-warnings.
* lib-src/etags.c: Omit unnecessary forward decls.
(print_version, print_help): Declare _Noreturn.
* lib-src/pop.c (socket_connection) [HAVE_GETADDRINFO]: Simplify.
* src/bytecode.c (exec_byte_code):
* src/regex.c:
Redo diagnostic pragmas to pacify clang, too.
* src/dbusbind.c (xd_retrieve_arg): Do not use uninitialized variable.
* src/editfns.c (Fencode_time):
* src/fileio.c (file_accessible_directory_p):
* src/font.c (font_unparse_xlfd):
Use '&"string"[index]' instead of '"string" + (index)'.
* src/undo.c (user_error): Remove; unused.

13 files changed:
ChangeLog
configure.ac
lib-src/ChangeLog
lib-src/etags.c
lib-src/pop.c
src/ChangeLog
src/bytecode.c
src/dbusbind.c
src/editfns.c
src/fileio.c
src/font.c
src/regex.c
src/undo.c

index 280aa2fbc4d1c77793197747321547b507f6d67f..ed30fc35ad1fb180896971e5b65e38b48ee58df0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2013-05-18  Paul Eggert  <eggert@cs.ucla.edu>
 
+       Port --enable-gcc-warnings to clang.
+       * configure.ac (nw): Remove obsolescent warnings.
+       These aren't needed for clang, or for gcc for that matter.
+       (emacs_cv_clang): New var, which tests for clang.
+       Omit warnings that clang is too picky about.
+       (GLIB_DISABLE_DEPRECATION_WARNINGS): Define this;
+       needed for Ubuntu 13.04 + clang + --enable-gcc-warnings.
+
        * make-dist (files): Add nt/Makefile.in, nt/gnulib.mk.
        Otherwise, 'configure; make' fails on non-Windows builds.
 
index 54f499e2126629a74ab0f84864caa6c7ed956c8f..00c841e77b0c920172defecc469ab9ae3e648c80 100644 (file)
@@ -554,7 +554,7 @@ case "${canonical}" in
   i[3456]86-*-* )
     case "${canonical}" in
       *-darwin* )               opsys=darwin ;;
-      *-mingw32 )              
+      *-mingw32 )
                opsys=mingw32
                # MinGW overrides and adds some system headers in nt/inc.
                GCC_TEST_OPTIONS="-I $srcdir/nt/inc"
@@ -747,27 +747,13 @@ else
   esac
   AC_SUBST([WERROR_CFLAGS])
 
-  nw="$nw -Waggregate-return"       # anachronistic
-  nw="$nw -Wlong-long"              # C90 is anachronistic
-  nw="$nw -Wc++-compat"             # We don't care about C++ compilers
-  nw="$nw -Wundef"                  # Warns on '#if GNULIB_FOO' etc in gnulib
-  nw="$nw -Wtraditional"            # Warns on #elif which we use often
-  nw="$nw -Wcast-qual"              # Too many warnings for now
-  nw="$nw -Wconversion"             # Too many warnings for now
   nw="$nw -Wsystem-headers"         # Don't let system headers trigger warnings
-  nw="$nw -Wsign-conversion"        # Too many warnings for now
   nw="$nw -Woverlength-strings"     # Not a problem these days
-  nw="$nw -Wtraditional-conversion" # Too many warnings for now
-  nw="$nw -Wunreachable-code"       # so buggy that it's now silently ignored
-  nw="$nw -Wpadded"                 # Our structs are not padded
-  nw="$nw -Wredundant-decls"        # we regularly (re)declare functions
   nw="$nw -Wlogical-op"             # any use of fwrite provokes this
   nw="$nw -Wformat-nonliteral"      # we do this a lot
   nw="$nw -Wvla"                    # warnings in gettext.h
   nw="$nw -Wnested-externs"         # use of XARGMATCH/verify_function__
-  nw="$nw -Wswitch-enum"            # Too many warnings for now
   nw="$nw -Wswitch-default"         # Too many warnings for now
-  nw="$nw -Wfloat-equal"            # warns about high-quality code
   nw="$nw -Winline"                 # OK to ignore 'inline'
   nw="$nw -Wjump-misses-init"       # We sometimes safely jump over init.
   nw="$nw -Wstrict-overflow"        # OK to optimize assuming that
@@ -785,6 +771,20 @@ else
   # The following line should be removable at some point.
   nw="$nw -Wsuggest-attribute=pure"
 
+  # clang is unduly picky about some things.
+  AC_CACHE_CHECK([whether the compiler is clang], [emacs_cv_clang],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM([[
+           #ifndef __clang__
+             #error "not clang"
+           #endif
+          ]])],
+       [emacs_cv_clang=yes],
+       [emacs_cv_clang=no])])
+  if test $emacs_cv_clang = yes; then
+    nw="$nw -Wcast-align"
+  fi
+
   gl_MANYWARN_ALL_GCC([ws])
   gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
   for w in $ws; do
@@ -801,6 +801,14 @@ else
   # gcc 4.5.0 20090517.
   gl_WARN_ADD([-Wno-logical-op])
 
+  # More things that clang is unduly picky about.
+  if test $emacs_cv_clang = yes; then
+    gl_WARN_ADD([-Wno-format-extra-args])
+    gl_WARN_ADD([-Wno-tautological-constant-out-of-range-compare])
+    gl_WARN_ADD([-Wno-unused-command-line-argument])
+    gl_WARN_ADD([-Wno-unused-value])
+  fi
+
   gl_WARN_ADD([-fdiagnostics-show-option])
   gl_WARN_ADD([-funit-at-a-time])
 
@@ -1604,15 +1612,15 @@ W32_RES_LINK=
 EMACS_MANIFEST=
 if test "${with_w32}" != no; then
   case "${opsys}" in
-    cygwin) 
+    cygwin)
       AC_CHECK_HEADER([windows.h], [HAVE_W32=yes],
              [AC_MSG_ERROR([`--with-w32' was specified, but windows.h
-                   cannot be found.])]) 
+                   cannot be found.])])
     ;;
     mingw32)
     ## Using --with-w32 with MinGW is a no-op, but we allow it.
     ;;
-    *) 
+    *)
       AC_MSG_ERROR([Using w32 with an autotools build is only supported for Cygwin and MinGW32.])
     ;;
   esac
@@ -1626,7 +1634,7 @@ if test "${opsys}" = "mingw32"; then
    [[void test(PIMAGE_NT_HEADERS pHeader)
      {PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pHeader);}]])],
    [emacs_cv_w32api=yes
-    HAVE_W32=yes], 
+    HAVE_W32=yes],
    emacs_cv_w32api=no)
   AC_MSG_RESULT($emacs_cv_w32api)
   if test "${emacs_cv_w32api}" = "no"; then
@@ -2074,6 +2082,7 @@ if test "${opsys}" != "mingw32"; then
        USE_GTK_TOOLKIT="GTK3"
        if test "x$ac_enable_gtk_deprecation_warnings" = x; then
                  GTK_CFLAGS="$GTK_CFLAGS -DGDK_DISABLE_DEPRECATION_WARNINGS"
+                 GTK_CFLAGS="$GTK_CFLAGS -DGLIB_DISABLE_DEPRECATION_WARNINGS"
        fi
     else
        check_gtk2=yes
index 6ff653b7be6c737ec331f20eb3a2a64fdf542a00..e565983e1473cb042ee499547f00199abf6c3a16 100644 (file)
@@ -1,3 +1,10 @@
+2013-05-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port --enable-gcc-warnings to clang.
+       * etags.c: Omit unnecessary forward decls.
+       (print_version, print_help): Declare _Noreturn.
+       * pop.c (socket_connection) [HAVE_GETADDRINFO]: Simplify.
+
 2013-05-16  Eli Zaretskii  <eliz@gnu.org>
 
        * update-game-score.c [WINDOWSNT]: Include "ntlib.h".
index 27a853a954ac15df64f34e08a5548601130988c5..f6b173bf465943119bd7189b7b9baff9ff161f39 100644 (file)
@@ -316,15 +316,7 @@ static void Texinfo_nodes (FILE *);
 static void Yacc_entries (FILE *);
 static void just_read_file (FILE *);
 
-static void print_language_names (void);
-static void print_version (void);
-static void print_help (argument *);
-int main (int, char **);
-
-static compressor *get_compressor_from_suffix (char *, char **);
 static language *get_language_from_langname (const char *);
-static language *get_language_from_interpreter (char *);
-static language *get_language_from_filename (char *, bool);
 static void readline (linebuffer *, FILE *);
 static long readline_internal (linebuffer *, FILE *);
 static bool nocase_tail (const char *);
@@ -346,7 +338,6 @@ static void find_entries (FILE *);
 static void free_tree (node *);
 static void free_fdesc (fdesc *);
 static void pfnote (char *, bool, char *, int, int, long);
-static void make_tag (const char *, int, bool, char *, int, int, long);
 static void invalidate_nodes (fdesc *, node **);
 static void put_entries (node *);
 
@@ -816,7 +807,7 @@ etags --help --lang=ada.");
 #ifndef VERSION
 # define VERSION "17.38.1.4"
 #endif
-static void
+static _Noreturn void
 print_version (void)
 {
   char emacs_copyright[] = COPYRIGHT;
@@ -832,7 +823,7 @@ print_version (void)
 # define PRINT_UNDOCUMENTED_OPTIONS_HELP FALSE
 #endif
 
-static void
+static _Noreturn void
 print_help (argument *argbuffer)
 {
   bool help_for_lang = FALSE;
index 1f3f82baa68c79d5380b393b00a8eaa0fd207603..a269144c9156d2a8d009ef3a4d8ec010f9294678 100644 (file)
@@ -1075,28 +1075,22 @@ socket_connection (char *host, int flags)
        }
     } while (ret != 0);
 
-  if (ret == 0)
-    {
-      it = res;
-      while (it)
-        {
-          if (it->ai_addrlen == sizeof (addr))
-            {
-              struct sockaddr_in *in_a = (struct sockaddr_in *) it->ai_addr;
-              addr.sin_addr = in_a->sin_addr;
-              if (! connect (sock, (struct sockaddr *) &addr, sizeof (addr)))
-                break;
-            }
-          it = it->ai_next;
-        }
-      connect_ok = it != NULL;
-      if (connect_ok)
-        {
-          realhost = alloca (strlen (it->ai_canonname) + 1);
-          strcpy (realhost, it->ai_canonname);
-        }
-      freeaddrinfo (res);
+  for (it = res; it; it = it->ai_next)
+    if (it->ai_addrlen == sizeof addr)
+      {
+       struct sockaddr_in *in_a = (struct sockaddr_in *) it->ai_addr;
+       addr.sin_addr = in_a->sin_addr;
+       if (! connect (sock, (struct sockaddr *) &addr, sizeof addr))
+         break;
+      }
+  connect_ok = it != NULL;
+  if (connect_ok)
+    {
+      realhost = alloca (strlen (it->ai_canonname) + 1);
+      strcpy (realhost, it->ai_canonname);
     }
+  freeaddrinfo (res);
+
 #else /* !HAVE_GETADDRINFO */
   do
     {
index 6909367dccb34889665404289bd543692e4d1872..e1f7a56aede52e2414034d574a5b085c643d0492 100644 (file)
@@ -1,3 +1,16 @@
+2013-05-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port --enable-gcc-warnings to clang.
+       * bytecode.c (exec_byte_code):
+       * regex.c:
+       Redo diagnostic pragmas to pacify clang, too.
+       * dbusbind.c (xd_retrieve_arg): Do not use uninitialized variable.
+       * editfns.c (Fencode_time):
+       * fileio.c (file_accessible_directory_p):
+       * font.c (font_unparse_xlfd):
+       Use '&"string"[index]' instead of '"string" + (index)'.
+       * undo.c (user_error): Remove; unused.
+
 2013-05-16  Eli Zaretskii  <eliz@gnu.org>
 
        * insdel.c (insert_1_both): Document the arguments, instead of
index 7676c8550a481c85d8c711edb67e3d815e5c6a25..4940fd5c1827a8b5ca247c6eeeeff98490e943b4 100644 (file)
@@ -660,9 +660,12 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
         the table clearer.  */
 #define LABEL(OP) [OP] = &&insn_ ## OP
 
-#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
+#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
 # pragma GCC diagnostic push
 # pragma GCC diagnostic ignored "-Woverride-init"
+#elif defined __clang__
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Winitializer-overrides"
 #endif
 
       /* This is the dispatch table for the threaded interpreter.  */
@@ -676,7 +679,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
 #undef DEFINE
        };
 
-#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
+#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) || defined __clang__
 # pragma GCC diagnostic pop
 #endif
 
index 863f7634eb5a6df20d1318ce77382259765d8aa0..3ec3c28431beedc19efd0d2af14401b7b1f20738 100644 (file)
@@ -882,7 +882,7 @@ xd_retrieve_arg (int dtype, DBusMessageIter *iter)
 #endif
       {
        dbus_uint32_t val;
-       unsigned int pval = val;
+       unsigned int pval;
        dbus_message_iter_get_basic (iter, &val);
        pval = val;
        XD_DEBUG_MESSAGE ("%c %u", dtype, pval);
index e0b0347fe69ac53a8a53c99972ad4a24e78befb6..cc6b4cff895a8c3f8f6d45f64cdccd20a43f9b5e 100644 (file)
@@ -1946,7 +1946,7 @@ usage: (encode-time SECOND MINUTE HOUR DAY MONTH YEAR &optional ZONE)  */)
          EMACS_INT zone_hr = abszone / (60*60);
          int zone_min = (abszone/60) % 60;
          int zone_sec = abszone % 60;
-         sprintf (tzbuf, tzbuf_format, "-" + (XINT (zone) < 0),
+         sprintf (tzbuf, tzbuf_format, &"-"[XINT (zone) < 0],
                   zone_hr, zone_min, zone_sec);
          tzstring = tzbuf;
        }
index fe1bce16ca0a34aa33fe8747b12e1eadd2801285..f20721251e636c37b51f0ea7e73d4b3aed5483b6 100644 (file)
@@ -2873,7 +2873,7 @@ file_accessible_directory_p (char const *file)
         and it's a safe optimization here.  */
       char *buf = SAFE_ALLOCA (len + 3);
       memcpy (buf, file, len);
-      strcpy (buf + len, "/." + (file[len - 1] == '/'));
+      strcpy (buf + len, &"/."[file[len - 1] == '/']);
       dir = buf;
     }
 
index ad601177b50188511131e1906d585f90c6b00f4e..7bd44a5e52f7272f7b7e71b17d0dd71fbe51612d 100644 (file)
@@ -1219,7 +1219,7 @@ font_unparse_xlfd (Lisp_Object font, int pixel_size, char *name, int nbytes)
                return -1;
              f[j] = p = alloca (alloc);
              sprintf (p, "%s%s-*", SDATA (val),
-                      "*" + (SDATA (val)[SBYTES (val) - 1] == '*'));
+                      &"*"[SDATA (val)[SBYTES (val) - 1] == '*']);
            }
          else
            f[j] = SSDATA (val);
@@ -1618,7 +1618,7 @@ font_unparse_fcname (Lisp_Object font, int pixel_size, char *name, int nbytes)
     }
   if (point_size > 0)
     {
-      int len = snprintf (p, lim - p, "-%d" + (p == name), point_size);
+      int len = snprintf (p, lim - p, &"-%d"[p == name], point_size);
       if (! (0 <= len && len < lim - p))
        return -1;
       p += len;
index 04429386f84f76583cdc2fd1d10d653947fcb3b6..79fb28ba12a6a7fb11a64e4842d773e6c7bf36ca 100644 (file)
 
 /* Ignore some GCC warnings for now.  This section should go away
    once the Emacs and Gnulib regex code is merged.  */
-#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
+#if 4 < __GNUC__ + (5 <= __GNUC_MINOR__) || defined __clang__
 # pragma GCC diagnostic ignored "-Wstrict-overflow"
 # ifndef emacs
-#  pragma GCC diagnostic ignored "-Wunused-but-set-variable"
 #  pragma GCC diagnostic ignored "-Wunused-function"
 #  pragma GCC diagnostic ignored "-Wunused-macros"
 #  pragma GCC diagnostic ignored "-Wunused-result"
 # endif
 #endif
 
+#if 4 < __GNUC__ + (5 <= __GNUC_MINOR__) && ! defined __clang__
+# pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#endif
+
 #include <config.h>
 
 #include <stddef.h>
index 63edc8e9b8db21777c364db444de20b0e8717f16..d8711882fbff66922b3bca81866c42af6e387c28 100644 (file)
@@ -445,12 +445,6 @@ truncate_undo_list (struct buffer *b)
   unbind_to (count, Qnil);
 }
 
-static _Noreturn void
-user_error (const char *msg)
-{
-  xsignal1 (Quser_error, build_string (msg));
-}
-
 \f
 void
 syms_of_undo (void)