mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-26 10:49:33 +00:00
cd19641ed3
This mostly just updates copyright dates of gnulib files. It also updates to the latest version of texinfo.tex.
102 lines
4.2 KiB
Plaintext
102 lines
4.2 KiB
Plaintext
dnl 'extern inline' a la ISO C99.
|
|
|
|
dnl Copyright 2012-2016 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.
|
|
|
|
AC_DEFUN([gl_EXTERN_INLINE],
|
|
[
|
|
AH_VERBATIM([extern_inline],
|
|
[/* Please see the Gnulib manual for how to use these macros.
|
|
|
|
Suppress extern inline with HP-UX cc, as it appears to be broken; see
|
|
<http://lists.gnu.org/archive/html/bug-texinfo/2013-02/msg00030.html>.
|
|
|
|
Suppress extern inline with Sun C in standards-conformance mode, as it
|
|
mishandles inline functions that call each other. E.g., for 'inline void f
|
|
(void) { } inline void g (void) { f (); }', c99 incorrectly complains
|
|
'reference to static identifier "f" in extern inline function'.
|
|
This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16.
|
|
|
|
Suppress extern inline (with or without __attribute__ ((__gnu_inline__)))
|
|
on configurations that mistakenly use 'static inline' to implement
|
|
functions or macros in standard C headers like <ctype.h>. For example,
|
|
if isdigit is mistakenly implemented via a static inline function,
|
|
a program containing an extern inline function that calls isdigit
|
|
may not work since the C standard prohibits extern inline functions
|
|
from calling static functions. This bug is known to occur on:
|
|
|
|
OS X 10.8 and earlier; see:
|
|
http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html
|
|
|
|
DragonFly; see
|
|
http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log
|
|
|
|
FreeBSD; see:
|
|
http://lists.gnu.org/archive/html/bug-gnulib/2014-07/msg00104.html
|
|
|
|
OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and
|
|
for clang but remains for g++; see <http://trac.macports.org/ticket/41033>.
|
|
Assume DragonFly and FreeBSD will be similar. */
|
|
#if (((defined __APPLE__ && defined __MACH__) \
|
|
|| defined __DragonFly__ || defined __FreeBSD__) \
|
|
&& (defined __header_inline \
|
|
? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \
|
|
&& ! defined __clang__) \
|
|
: ((! defined _DONT_USE_CTYPE_INLINE_ \
|
|
&& (defined __GNUC__ || defined __cplusplus)) \
|
|
|| (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \
|
|
&& defined __GNUC__ && ! defined __cplusplus))))
|
|
# define _GL_EXTERN_INLINE_STDHEADER_BUG
|
|
#endif
|
|
#if ((__GNUC__ \
|
|
? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
|
|
: (199901L <= __STDC_VERSION__ \
|
|
&& !defined __HP_cc \
|
|
&& !(defined __SUNPRO_C && __STDC__))) \
|
|
&& !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
|
|
# define _GL_INLINE inline
|
|
# define _GL_EXTERN_INLINE extern inline
|
|
# define _GL_EXTERN_INLINE_IN_USE
|
|
#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \
|
|
&& !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
|
|
# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__
|
|
/* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */
|
|
# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
|
|
# else
|
|
# define _GL_INLINE extern inline
|
|
# endif
|
|
# define _GL_EXTERN_INLINE extern
|
|
# define _GL_EXTERN_INLINE_IN_USE
|
|
#else
|
|
# define _GL_INLINE static _GL_UNUSED
|
|
# define _GL_EXTERN_INLINE static _GL_UNUSED
|
|
#endif
|
|
|
|
/* In GCC 4.6 (inclusive) to 5.1 (exclusive),
|
|
suppress bogus "no previous prototype for 'FOO'"
|
|
and "no previous declaration for 'FOO'" diagnostics,
|
|
when FOO is an inline function in the header; see
|
|
<https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and
|
|
<https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>. */
|
|
#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__
|
|
# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
|
|
# define _GL_INLINE_HEADER_CONST_PRAGMA
|
|
# else
|
|
# define _GL_INLINE_HEADER_CONST_PRAGMA \
|
|
_Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
|
|
# endif
|
|
# define _GL_INLINE_HEADER_BEGIN \
|
|
_Pragma ("GCC diagnostic push") \
|
|
_Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
|
|
_Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
|
|
_GL_INLINE_HEADER_CONST_PRAGMA
|
|
# define _GL_INLINE_HEADER_END \
|
|
_Pragma ("GCC diagnostic pop")
|
|
#else
|
|
# define _GL_INLINE_HEADER_BEGIN
|
|
# define _GL_INLINE_HEADER_END
|
|
#endif])
|
|
])
|