* libc/include/_ansi.h (_ELIDABLE_INLINE): Fix C99 mode.

This commit is contained in:
Eric Blake 2012-02-09 19:58:33 +00:00
parent 3b20fd9324
commit 833630b859
2 changed files with 17 additions and 10 deletions

View File

@ -1,3 +1,7 @@
2012-02-09 Eric Blake <eblake@redhat.com>
* libc/include/_ansi.h (_ELIDABLE_INLINE): Fix C99 mode.
2012-02-09 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libc/sys/rtems/sys/utime.h: Include <sys/types.h> to provide a

View File

@ -113,21 +113,24 @@
to emit the function body unless the address is explicitly
taken. However this behaviour is changing to match the C99
standard, which uses 'extern inline' to indicate that the
function body *must* be emitted. If we are using GCC, but do
not have the new behaviour, we need to use extern inline; if
we are using a new GCC with the C99-compatible behaviour, or
a non-GCC compiler (which we will have to hope is C99, since
there is no other way to achieve the effect of omitting the
function if it isn't referenced) we just use plain 'inline',
which c99 defines to mean more-or-less the same as the Gnu C
'extern inline'. */
function body *must* be emitted. Likewise, a function declared
without either 'extern' or 'static' defaults to extern linkage
(C99 6.2.2p5), and the compiler may choose whether to use the
inline version or call the extern linkage version (6.7.4p6).
If we are using GCC, but do not have the new behaviour, we need
to use extern inline; if we are using a new GCC with the
C99-compatible behaviour, or a non-GCC compiler (which we will
have to hope is C99, since there is no other way to achieve the
effect of omitting the function if it isn't referenced) we use
'static inline', which c99 defines to mean more-or-less the same
as the Gnu C 'extern inline'. */
#if defined(__GNUC__) && !defined(__GNUC_STDC_INLINE__)
/* We're using GCC, but without the new C99-compatible behaviour. */
#define _ELIDABLE_INLINE extern __inline__ _ATTRIBUTE ((__always_inline__))
#else
/* We're using GCC in C99 mode, or an unknown compiler which
we just have to hope obeys the C99 semantics of inline. */
#define _ELIDABLE_INLINE __inline__
#define _ELIDABLE_INLINE static __inline__
#endif
#endif /* _ANSIDECL_H_ */