autoconf-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] GNU Autoconf source repository branch, master, updated. v2.69-143-


From: Noah Misch
Subject: [SCM] GNU Autoconf source repository branch, master, updated. v2.69-143-g82ef780
Date: Thu, 14 May 2015 01:21:22 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Autoconf source repository".

http://git.sv.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=82ef7805faffa151e724aa76c245ec590d174580

The branch, master has been updated
       via  82ef7805faffa151e724aa76c245ec590d174580 (commit)
      from  d2f0ec870814233f21d9f3404ef60b8c65b47cad (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 82ef7805faffa151e724aa76c245ec590d174580
Author: Noah Misch <address@hidden>
Date:   Wed May 13 21:11:47 2015 -0400

    AC_CHECK_DECL, AC_CHECK_DECLS: port to the Clang compiler
    
    * lib/autoconf/general.m4 (_AC_UNDECLARED_WARNING): New macro.
    (_AC_CHECK_DECL_BODY): Call it once per language; treat warnings as
    errors when its verdict indicates that.
    * tests/semantics.at (AC_CHECK_DECLS): Add a macro call that relies on
    the new semantics.  Avoid -Wmissing-variable-declarations warnings.
    * doc/autoconf.texi (Generic Declarations): Document the implications.
    * NEWS: Mention this change.

-----------------------------------------------------------------------

Summary of changes:
 NEWS                    |    3 ++
 doc/autoconf.texi       |   12 +++++++++
 lib/autoconf/general.m4 |   60 ++++++++++++++++++++++++++++++++++++++++++++++-
 tests/semantics.at      |   10 +++++--
 4 files changed, 81 insertions(+), 4 deletions(-)

diff --git a/NEWS b/NEWS
index 2df5a80..f691179 100644
--- a/NEWS
+++ b/NEWS
@@ -61,6 +61,9 @@ GNU Autoconf NEWS - User visible changes.
 - AC_USE_SYSTEM_EXTENSIONS now enables more system extensions on HP-UX,
   MINIX 3, and OS X.
 
+- AC_CHECK_DECL and AC_CHECK_DECLS can now report missing declarations for
+  functions that are also Clang compiler builtins.
+
 - AC_FUNC_VFORK now checks for the signal-handling bug in Solaris 2.4 'vfork'.
   Formerly, it ignored this bug, so that Emacs could use some tricky
   code on that platform.  Solaris 2.4 has not been supported since
diff --git a/doc/autoconf.texi b/doc/autoconf.texi
index b2ca0ae..8c4302d 100644
--- a/doc/autoconf.texi
+++ b/doc/autoconf.texi
@@ -6315,6 +6315,12 @@ parentheses for types which can be zero-initialized:
 AC_CHECK_DECL([basename(char *)])
 @end example
 
+Some compilers don't indicate every missing declaration by the error
+status.  This macro checks the standard error from such compilers and
+considers a declaration missing if any warnings have been reported.  For
+most compilers, though, warnings do not affect this macro's outcome
+unless @code{AC_LANG_WERROR} is also specified.
+
 This macro caches its result in the @address@hidden
 variable, with characters not suitable for a variable name mapped to
 underscores.
@@ -6375,6 +6381,12 @@ You fall into the second category only in extreme 
situations: either
 your files may be used without being configured, or they are used during
 the configuration.  In most cases the traditional approach is enough.
 
+Some compilers don't indicate every missing declaration by the error
+status.  This macro checks the standard error from such compilers and
+considers a declaration missing if any warnings have been reported.  For
+most compilers, though, warnings do not affect this macro's outcome
+unless @code{AC_LANG_WERROR} is also specified.
+
 This macro caches its results in @address@hidden
 variables, with characters not suitable for a variable name mapped to
 underscores.
diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4
index 49df536..a7f1439 100644
--- a/lib/autoconf/general.m4
+++ b/lib/autoconf/general.m4
@@ -2864,15 +2864,72 @@ AC_DEFUN([AC_CHECK_FILES],
 ## ------------------------------- ##
 
 
+# _AC_UNDECLARED_WARNING
+# ----------------------
+# Set ac_[]_AC_LANG_ABBREV[]_decl_warn_flag=yes if the compiler uses a warning,
+# not a more-customary error, to report some undeclared identifiers.  Fail when
+# an affected compiler warns also on valid input.  
_AC_PROG_PREPROC_WORKS_IFELSE
+# solves a related problem.
+AC_DEFUN([_AC_UNDECLARED_WARNING],
+[# The Clang compiler raises a warning for an undeclared identifier that 
matches
+# a compiler builtin function.  All extant Clang versions are affected, as of
+# Clang 3.6.0.  Test a builtin known to every version.  This problem affects 
the
+# C and Objective C languages, but Clang does report an error under C++ and
+# Objective C++.
+#
+# Passing -fno-builtin to the compiler would suppress this problem.  That
+# strategy would have the advantage of being insensitive to stray warnings, but
+# it would make tests less realistic.
+AC_CACHE_CHECK([how $[]_AC_CC[] reports undeclared, standard C functions],
+[ac_cv_[]_AC_LANG_ABBREV[]_decl_report],
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [(void) strchr;])],
+  [AS_IF([test -s conftest.err], [dnl
+    # For AC_CHECK_DECL to react to warnings, the compiler must be silent on
+    # valid AC_CHECK_DECL input.  No library function is consistently available
+    # on freestanding implementations, so test against a dummy declaration.
+    # Include always-available headers on the off chance that they somehow
+    # elicit warnings.
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([dnl
+#include <float.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stddef.h>
+extern void ac_decl (int, char *);],
address@hidden:@ifdef __cplusplus
+  (void) ac_decl ((int) 0, (char *) 0);
+  (void) ac_decl;
address@hidden:@else
+  (void) ac_decl;
address@hidden:@endif
+])],
+      [AS_IF([test -s conftest.err],
+       [AC_MSG_FAILURE([cannot detect from compiler exit status or warnings])],
+       [ac_cv_[]_AC_LANG_ABBREV[]_decl_report=warning])],
+      [AC_MSG_FAILURE([cannot compile a simple declaration test])])],
+    [AC_MSG_FAILURE([compiler does not report undeclared identifiers])])],
+  [ac_cv_[]_AC_LANG_ABBREV[]_decl_report=error])])
+
+case $ac_cv_[]_AC_LANG_ABBREV[]_decl_report in
+  warning) ac_[]_AC_LANG_ABBREV[]_decl_warn_flag=yes ;;
+  *) ac_[]_AC_LANG_ABBREV[]_decl_warn_flag= ;;
+esac
+])# _AC_UNDECLARED_WARNING
+
 # _AC_CHECK_DECL_BODY
 # -------------------
 # Shell function body for AC_CHECK_DECL.
 m4_define([_AC_CHECK_DECL_BODY],
 [  AS_LINENO_PUSH([$[]1])
+  # Initialize each $ac_[]_AC_LANG_ABBREV[]_decl_warn_flag once.
+  AC_DEFUN([_AC_UNDECLARED_WARNING_]_AC_LANG_ABBREV,
+          [_AC_UNDECLARED_WARNING])dnl
+  AC_REQUIRE([_AC_UNDECLARED_WARNING_]_AC_LANG_ABBREV)dnl
   [as_decl_name=`echo $][2|sed 's/ *(.*//'`]
   [as_decl_use=`echo $][2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`]
   AC_CACHE_CHECK([whether $as_decl_name is declared], [$[]3],
-  [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$[]4],
+  [ac_save_werror_flag=$ac_[]_AC_LANG_ABBREV[]_werror_flag
+  
ac_[]_AC_LANG_ABBREV[]_werror_flag="$ac_[]_AC_LANG_ABBREV[]_decl_warn_flag$ac_[]_AC_LANG_ABBREV[]_werror_flag"
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$[]4],
 address@hidden:@ifndef $[]as_decl_name
 @%:@ifdef __cplusplus
   (void) $[]as_decl_use;
@@ -2883,6 +2940,7 @@ m4_define([_AC_CHECK_DECL_BODY],
 ])],
                   [AS_VAR_SET([$[]3], [yes])],
                   [AS_VAR_SET([$[]3], [no])])])
+  ac_[]_AC_LANG_ABBREV[]_werror_flag=$ac_save_werror_flag
   AS_LINENO_POP
 ])# _AC_CHECK_DECL_BODY
 
diff --git a/tests/semantics.at b/tests/semantics.at
index a7abd52..1294545 100644
--- a/tests/semantics.at
+++ b/tests/semantics.at
@@ -101,15 +101,18 @@ esac
 
 # AC_CHECK_DECLS
 # --------------
-# Check that it performs the correct actions:
+# For the benefit of _AC_UNDECLARED_WARNING compilers, these INCLUDES sections
+# should not elicit warnings.
 AT_CHECK_MACRO([AC_CHECK_DECLS],
 [[AC_CHECK_DECLS([yes, no, myenum, mystruct, myfunc, mymacro1, mymacro2],,,
-                [[int yes = 1;
+                [[extern int yes;
                   enum { myenum };
-                  struct { int x[20]; } mystruct;
+                  extern struct { int x[20]; } mystruct;
                   extern int myfunc();
                   #define mymacro1(arg) arg
                   #define mymacro2]])
+  # Clang reports a warning for an undeclared builtin.
+  AC_CHECK_DECLS([strerror],,, [[]])
   # The difference in space-before-open-paren is intentional.
   AC_CHECK_DECLS([basenam (char *), dirnam(char *),
                  [moreargs (char, short, int, long, void *, char [], float, 
double)]],,,
@@ -148,6 +151,7 @@ AT_CHECK_MACRO([AC_CHECK_DECLS],
 #define HAVE_DECL_MYMACRO2 1
 #define HAVE_DECL_MYSTRUCT 1
 #define HAVE_DECL_NO 0
+#define HAVE_DECL_STRERROR 0
 #define HAVE_DECL_YES 1
 ])])
 


hooks/post-receive
-- 
GNU Autoconf source repository



reply via email to

[Prev in Thread] Current Thread [Next in Thread]