summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2011-02-12 22:16:44 -0800
committerPaul Eggert <eggert@cs.ucla.edu>2011-02-12 22:16:58 -0800
commitb45dc2169519c99279f6631bafbeb6f40fd73c14 (patch)
tree20ba143a256c7e445e8be0086da38ffddbd10e6e
parent4baa767de84048d693cb07d6d8a461b3343f1bb7 (diff)
downloadgnulib-b45dc2169519c99279f6631bafbeb6f40fd73c14.tar.gz
stdlib: don't get in the way of non-GCC __attribute__
-rw-r--r--ChangeLog11
-rw-r--r--lib/stdlib.in.h13
-rw-r--r--m4/_Exit.m44
-rw-r--r--m4/attribute.m429
-rw-r--r--m4/stdlib_h.m43
-rw-r--r--modules/_Exit1
-rw-r--r--modules/stdlib1
7 files changed, 20 insertions, 42 deletions
diff --git a/ChangeLog b/ChangeLog
index 02c69df863..88423b73f8 100644
--- 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.
diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h
index 029d15d579..62d18c6281 100644
--- a/lib/stdlib.in.h
+++ b/lib/stdlib.in.h
@@ -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);
diff --git a/m4/_Exit.m4 b/m4/_Exit.m4
index 3d01f1aca0..329b8cdd73 100644
--- a/m4/_Exit.m4
+++ b/m4/_Exit.m4
@@ -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
index 04758fd36b..0000000000
--- a/m4/attribute.m4
+++ /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])
-])
diff --git a/m4/stdlib_h.m4 b/m4/stdlib_h.m4
index 56713dd357..d28b552e90 100644
--- a/m4/stdlib_h.m4
+++ b/m4/stdlib_h.m4
@@ -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])
diff --git a/modules/_Exit b/modules/_Exit
index d9a590c46b..2b5cc084b2 100644
--- a/modules/_Exit
+++ b/modules/_Exit
@@ -4,7 +4,6 @@ _Exit() function: terminate current process.
Files:
lib/_Exit.c
m4/_Exit.m4
-m4/attribute.m4
Depends-on:
stdlib
diff --git a/modules/stdlib b/modules/stdlib
index 6ba95ba96c..7d7e769a2a 100644
--- a/modules/stdlib
+++ b/modules/stdlib
@@ -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' \