diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2012-08-20 17:01:18 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2012-08-20 17:02:41 -0700 |
commit | eb872c43a7bfea71a5a3bb95b6817cc3d7c0966f (patch) | |
tree | 5d7f46c22ba4e3ddfe99fcee16d8d00eff30569c /m4/extern-inline.m4 | |
parent | 96ad9077d219395a644c2310421196b317c49d21 (diff) | |
download | gnulib-eb872c43a7bfea71a5a3bb95b6817cc3d7c0966f.tar.gz |
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
<http://lists.gnu.org/archive/html/bug-gnulib/2012-08/msg00097.html>.
Diffstat (limited to 'm4/extern-inline.m4')
-rw-r--r-- | m4/extern-inline.m4 | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/m4/extern-inline.m4 b/m4/extern-inline.m4 index 187a33599a..12f24fab95 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]) |