From b45dc2169519c99279f6631bafbeb6f40fd73c14 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 12 Feb 2011 22:16:44 -0800 Subject: [PATCH 1/1] stdlib: don't get in the way of non-GCC __attribute__ --- ChangeLog | 11 +++++++++++ lib/stdlib.in.h | 13 +++++++------ m4/_Exit.m4 | 4 +--- m4/attribute.m4 | 29 ----------------------------- m4/stdlib_h.m4 | 3 +-- modules/_Exit | 1 - modules/stdlib | 1 - 7 files changed, 20 insertions(+), 42 deletions(-) delete mode 100644 m4/attribute.m4 diff --git a/ChangeLog b/ChangeLog index 02c69df86..88423b73f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2011-02-12 Paul Eggert + + stdlib: don't get in the way of non-GCC __attribute__ + See thread starting at + . + 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 quotearg test: Avoid test failure on mingw. diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h index 029d15d57..62d18c628 100644 --- a/lib/stdlib.in.h +++ b/lib/stdlib.in.h @@ -88,6 +88,12 @@ struct random_data # include #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 3d01f1aca..329b8cdd7 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 04758fd36..000000000 --- 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 56713dd35..d28b552e9 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 d9a590c46..2b5cc084b 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 6ba95ba96..7d7e769a2 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' \ -- 2.11.0