From: Paul Eggert Date: Tue, 21 Aug 2012 00:01:18 +0000 (-0700) Subject: extern-inline: support old GCC 'inline' X-Git-Tag: v0.1~472 X-Git-Url: http://erislabs.net/gitweb/?a=commitdiff_plain;h=eb872c43a7bfea71a5a3bb95b6817cc3d7c0966f;p=gnulib.git extern-inline: support old GCC 'inline' * m4/extern-inline.m4 (gl_EXTERN_INLINE): Use pre-C99 GCC 'inline' if available. This applies to GCC versions 2.7 through 4.2, or when newer GCC is using -fgnu89-inline. The goal is to address some of the performance issues mentioned by Bruno Haible in . --- diff --git a/ChangeLog b/ChangeLog index 890ce179b..9d9266e8a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2012-08-20 Paul Eggert + + extern-inline: support old GCC 'inline' + * m4/extern-inline.m4 (gl_EXTERN_INLINE): Use pre-C99 GCC 'inline' + if available. This applies to GCC versions 2.7 through 4.2, or + when newer GCC is using -fgnu89-inline. The goal is to address + some of the performance issues mentioned by Bruno Haible in + . + 2012-08-20 Eric Blake maint.mk: avoid redundant file name in message diff --git a/m4/extern-inline.m4 b/m4/extern-inline.m4 index 187a33599..12f24fab9 100644 --- a/m4/extern-inline.m4 +++ b/m4/extern-inline.m4 @@ -21,20 +21,34 @@ AC_DEFUN([gl_EXTERN_INLINE], #if __GNUC__ ? __GNUC_STDC_INLINE__ : 199901L <= __STDC_VERSION__ # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline -# if (__GNUC__ == 4 && 6 <= __GNUC_MINOR__) || 4 < __GNUC__ -# define _GL_INLINE_HEADER_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ - _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") -# define _GL_INLINE_HEADER_END \ - _Pragma ("GCC diagnostic pop") +#elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# if __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 #else # define _GL_INLINE static inline # define _GL_EXTERN_INLINE static inline #endif -#ifndef _GL_INLINE_HEADER_BEGIN +#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) +# if __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])