summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2008-04-12 03:26:13 +0200
committerBruno Haible <bruno@clisp.org>2008-04-12 03:26:13 +0200
commitb2cf43d6c45193102d4c90fc82007f15c1e98e47 (patch)
treedc915d0fbd7db1221b79a15b4212f8a381de306d
parentcb5e025dd6fc3ff5888f138ce3dd7d94b5883358 (diff)
downloadgnulib-b2cf43d6c45193102d4c90fc82007f15c1e98e47.tar.gz
Adapt to future versions of Apple GCC.
-rw-r--r--ChangeLog6
-rw-r--r--lib/argp-fmtstream.h34
2 files changed, 38 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 5708a23ed5..d3de184f6c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2008-04-11 Bruno Haible <bruno@clisp.org>
+ Adapt to future versions of Apple GCC.
+ * lib/argp-fmtstream.h (ARGP_FS_EI): Don't test __GNUC_GNU_INLINE__.
+ Reported by Peter O'Gorman <peter@pogma.com>.
+
+2008-04-11 Bruno Haible <bruno@clisp.org>
+
* tests/test-getaddrinfo.c (simple): Ignore EAI_NONAME error.
2008-04-11 Bruno Haible <bruno@clisp.org>
diff --git a/lib/argp-fmtstream.h b/lib/argp-fmtstream.h
index 1cd6eac6dc..73157e0c56 100644
--- a/lib/argp-fmtstream.h
+++ b/lib/argp-fmtstream.h
@@ -206,14 +206,44 @@ extern int __argp_fmtstream_ensure (argp_fmtstream_t __fs, size_t __amount);
inline semantics, unless -fgnu89-inline is used. It defines a macro
__GNUC_STDC_INLINE__ to indicate this situation or a macro
__GNUC_GNU_INLINE__ to indicate the opposite situation.
+
GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline
semantics but warns, unless -fgnu89-inline is used:
warning: C99 inline functions are not supported; using GNU89
warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute
- It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. */
+ It defines a macro __GNUC_GNU_INLINE__ to indicate this situation.
+
+ Whereas Apple GCC 4.0.1 build 5479 without -std=c99 or -std=gnu99
+ implements the GNU C inline semantics and defines the macro
+ __GNUC_GNU_INLINE__, but it does not warn and does not support
+ __attribute__ ((__gnu_inline__)).
+
+ All in all, these are the possible combinations. For every compiler,
+ we need to choose ARGP_FS_EI so that the corresponding table cell
+ contains an "ok".
+
+ \ ARGP_FS_EI inline extern extern
+ \ inline inline
+ CC \ __attribute__
+ ((gnu_inline))
+
+ gcc 4.3.0 error ok ok
+ gcc 4.3.0 -std=gnu99 -fgnu89-inline error ok ok
+ gcc 4.3.0 -std=gnu99 ok error ok
+
+ gcc 4.2.2 error ok ok
+ gcc 4.2.2 -std=gnu99 -fgnu89-inline error ok ok
+ gcc 4.2.2 -std=gnu99 error warning ok
+
+ gcc 4.1.2 error ok warning
+ gcc 4.1.2 -std=gnu99 error ok warning
+
+ Apple gcc 4.0.1 error ok warning
+ Apple gcc 4.0.1 -std=gnu99 ok error warning
+ */
# if defined __GNUC_STDC_INLINE__
# define ARGP_FS_EI inline
-# elif defined __GNUC_GNU_INLINE__
+# elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
# define ARGP_FS_EI extern inline __attribute__ ((__gnu_inline__))
# else
# define ARGP_FS_EI extern inline