stdlib: don't get in the way of non-GCC __attribute__
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 13 Feb 2011 06:16:44 +0000 (22:16 -0800)
committerIan Beckwith <ianb@erislabs.net>
Wed, 16 Feb 2011 23:28:54 +0000 (23:28 +0000)
(cherry picked from commit b45dc2169519c99279f6631bafbeb6f40fd73c14)

ChangeLog
lib/stdlib.in.h
m4/_Exit.m4
m4/attribute.m4 [deleted file]
m4/stdlib_h.m4
modules/_Exit
modules/stdlib

index 291fd8d..e706d8a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2011-02-12  Paul Eggert  <eggert@cs.ucla.edu>
+
+       stdlib: don't get in the way of non-GCC __attribute__
+       See thread starting at
+       <http://lists.gnu.org/archive/html/bug-gnulib/2011-02/msg00161.html>.
+       Revert previous stdlib change, installing the following instead:
+       * lib/stdin.in.h (__attribute__): Remove.  We do not want
+       to get in the way of a non-GCC compiler that supports __attribute__.
+       (_GL_ATTRIBUTE_RETURN): New macro.
+       (_Exit): Use it instead of __attribute__.
+
 2011-02-12  Bruno Haible  <bruno@clisp.org>
 
        quotearg test: Avoid test failure on mingw.
index 029d15d..62d18c6 100644 (file)
@@ -88,6 +88,12 @@ struct random_data
 # include <unistd.h>
 #endif
 
+#if 3 <= __GNUC__ || __GNUC__ == 2 && 8 <= __GNUC_MINOR__
+# define _GL_ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+#else
+# define _GL_ATTRIBUTE_NORETURN
+#endif
+
 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
 
 /* The definition of _GL_ARG_NONNULL is copied here.  */
@@ -113,12 +119,7 @@ struct random_data
 /* Terminate the current process with the given return code, without running
    the 'atexit' handlers.  */
 # if !@HAVE__EXIT@
-#  if @HAVE_ATTRIBUTE_NORETURN@
-#   define _GL_ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
-#  else
-#   define _GL_ATTRIBUTE_NORETURN
-#  endif
-_GL_FUNCDECL_SYS (_Exit, void, (int status)) _GL_ATTRIBUTE_NORETURN;
+_GL_FUNCDECL_SYS (_Exit, void, (int status) _GL_ATTRIBUTE_NORETURN);
 # endif
 _GL_CXXALIAS_SYS (_Exit, void, (int status));
 _GL_CXXALIASWARN (_Exit);
index 3d01f1a..329b8cd 100644 (file)
@@ -1,4 +1,4 @@
-# _Exit.m4 serial 2
+# _Exit.m4 serial 1
 dnl Copyright (C) 2010-2011 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -7,8 +7,6 @@ dnl with or without modifications, as long as this notice is preserved.
 AC_DEFUN([gl_FUNC__EXIT],
 [
   AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
-  AC_REQUIRE([gl_ATTRIBUTE_NORETURN])
-
   AC_CHECK_FUNCS([_Exit])
   if test $ac_cv_func__Exit = no; then
     HAVE__EXIT=0
diff --git a/m4/attribute.m4 b/m4/attribute.m4
deleted file mode 100644 (file)
index 04758fd..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-# Test for GCC-style __attribute__ support.
-
-dnl Copyright (C) 2011 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl from Paul Eggert
-
-# Currently only __attribute__ ((__noreturn__)) is done,
-# but other macros can be added to this file as needed.
-
-# Test whether __attribute__ ((__noreturn__)) works.
-AC_DEFUN([gl_ATTRIBUTE_NORETURN], [
-  AC_CACHE_CHECK([for  __attribute__ ((__noreturn__))],
-    [gl_cv_attribute_noreturn],
-    [gl_save_werror_flag=$ac_[]_AC_LANG_ABBREV[]_werror_flag
-     ac_[]_AC_LANG_ABBREV[]_werror_flag=yes
-     AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[void never_come_back (int) __attribute__ ((__noreturn__));]])],
-       [gl_cv_attribute_noreturn=yes],
-       [gl_cv_attribute_noreturn=no])
-     ac_[]_AC_LANG_ABBREV[]_werror_flag=$gl_save_werror_flag])
-  if test $gl_cv_attribute_noreturn = no; then
-    HAVE_ATTRIBUTE_NORETURN=0
-  fi
-  AC_SUBST([HAVE_ATTRIBUTE_NORETURN])
-])
index 56713dd..d28b552 100644 (file)
@@ -1,4 +1,4 @@
-# stdlib_h.m4 serial 37
+# stdlib_h.m4 serial 36
 dnl Copyright (C) 2007-2011 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -65,7 +65,6 @@ AC_DEFUN([gl_STDLIB_H_DEFAULTS],
   dnl Assume proper GNU behavior unless another module says otherwise.
   HAVE__EXIT=1;              AC_SUBST([HAVE__EXIT])
   HAVE_ATOLL=1;              AC_SUBST([HAVE_ATOLL])
-  HAVE_ATTRIBUTE_NORETURN=1; AC_SUBST([HAVE_ATTRIBUTE_NORETURN])
   HAVE_CANONICALIZE_FILE_NAME=1;  AC_SUBST([HAVE_CANONICALIZE_FILE_NAME])
   HAVE_DECL_GETLOADAVG=1;    AC_SUBST([HAVE_DECL_GETLOADAVG])
   HAVE_GETSUBOPT=1;          AC_SUBST([HAVE_GETSUBOPT])
index d9a590c..2b5cc08 100644 (file)
@@ -4,7 +4,6 @@ _Exit() function: terminate current process.
 Files:
 lib/_Exit.c
 m4/_Exit.m4
-m4/attribute.m4
 
 Depends-on:
 stdlib
index 6ba95ba..7d7e769 100644 (file)
@@ -57,7 +57,6 @@ stdlib.h: stdlib.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
              < $(srcdir)/stdlib.in.h | \
          sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \
              -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \
-             -e 's|@''HAVE_ATTRIBUTE_NORETURN''@|$(HAVE_ATTRIBUTE_NORETURN)|g' \
              -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \
              -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \
              -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \