diff options
Diffstat (limited to 'gl/m4/extern-inline.m4')
-rw-r--r-- | gl/m4/extern-inline.m4 | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/gl/m4/extern-inline.m4 b/gl/m4/extern-inline.m4 new file mode 100644 index 00000000..c4c5e7f2 --- /dev/null +++ b/gl/m4/extern-inline.m4 | |||
@@ -0,0 +1,70 @@ | |||
1 | dnl 'extern inline' a la ISO C99. | ||
2 | |||
3 | dnl Copyright 2012-2013 Free Software Foundation, Inc. | ||
4 | dnl This file is free software; the Free Software Foundation | ||
5 | dnl gives unlimited permission to copy and/or distribute it, | ||
6 | dnl with or without modifications, as long as this notice is preserved. | ||
7 | |||
8 | AC_DEFUN([gl_EXTERN_INLINE], | ||
9 | [ | ||
10 | AH_VERBATIM([extern_inline], | ||
11 | [/* Please see the Gnulib manual for how to use these macros. | ||
12 | |||
13 | Suppress extern inline with HP-UX cc, as it appears to be broken; see | ||
14 | <http://lists.gnu.org/archive/html/bug-texinfo/2013-02/msg00030.html>. | ||
15 | |||
16 | Suppress extern inline with Sun C in standards-conformance mode, as it | ||
17 | mishandles inline functions that call each other. E.g., for 'inline void f | ||
18 | (void) { } inline void g (void) { f (); }', c99 incorrectly complains | ||
19 | 'reference to static identifier "f" in extern inline function'. | ||
20 | This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. | ||
21 | |||
22 | Suppress the use of extern inline on Apple's platforms, as Libc at least | ||
23 | through Libc-825.26 (2013-04-09) is incompatible with it; see, e.g., | ||
24 | <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>. | ||
25 | Perhaps Apple will fix this some day. */ | ||
26 | #if ((__GNUC__ \ | ||
27 | ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ | ||
28 | : (199901L <= __STDC_VERSION__ \ | ||
29 | && !defined __HP_cc \ | ||
30 | && !(defined __SUNPRO_C && __STDC__))) \ | ||
31 | && !defined __APPLE__) | ||
32 | # define _GL_INLINE inline | ||
33 | # define _GL_EXTERN_INLINE extern inline | ||
34 | #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ | ||
35 | && !defined __APPLE__) | ||
36 | # if __GNUC_GNU_INLINE__ | ||
37 | /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ | ||
38 | # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) | ||
39 | # else | ||
40 | # define _GL_INLINE extern inline | ||
41 | # endif | ||
42 | # define _GL_EXTERN_INLINE extern | ||
43 | #else | ||
44 | # define _GL_INLINE static _GL_UNUSED | ||
45 | # define _GL_EXTERN_INLINE static _GL_UNUSED | ||
46 | #endif | ||
47 | |||
48 | #if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) | ||
49 | # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ | ||
50 | # define _GL_INLINE_HEADER_CONST_PRAGMA | ||
51 | # else | ||
52 | # define _GL_INLINE_HEADER_CONST_PRAGMA \ | ||
53 | _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") | ||
54 | # endif | ||
55 | /* Suppress GCC's bogus "no previous prototype for 'FOO'" | ||
56 | and "no previous declaration for 'FOO'" diagnostics, | ||
57 | when FOO is an inline function in the header; see | ||
58 | <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>. */ | ||
59 | # define _GL_INLINE_HEADER_BEGIN \ | ||
60 | _Pragma ("GCC diagnostic push") \ | ||
61 | _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ | ||
62 | _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ | ||
63 | _GL_INLINE_HEADER_CONST_PRAGMA | ||
64 | # define _GL_INLINE_HEADER_END \ | ||
65 | _Pragma ("GCC diagnostic pop") | ||
66 | #else | ||
67 | # define _GL_INLINE_HEADER_BEGIN | ||
68 | # define _GL_INLINE_HEADER_END | ||
69 | #endif]) | ||
70 | ]) | ||