* 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> 2012-02-09 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libc/sys/rtems/sys/utime.h: Include <sys/types.h> to provide a * 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 to emit the function body unless the address is explicitly
taken. However this behaviour is changing to match the C99 taken. However this behaviour is changing to match the C99
standard, which uses 'extern inline' to indicate that the standard, which uses 'extern inline' to indicate that the
function body *must* be emitted. If we are using GCC, but do function body *must* be emitted. Likewise, a function declared
not have the new behaviour, we need to use extern inline; if without either 'extern' or 'static' defaults to extern linkage
we are using a new GCC with the C99-compatible behaviour, or (C99 6.2.2p5), and the compiler may choose whether to use the
a non-GCC compiler (which we will have to hope is C99, since inline version or call the extern linkage version (6.7.4p6).
there is no other way to achieve the effect of omitting the If we are using GCC, but do not have the new behaviour, we need
function if it isn't referenced) we just use plain 'inline', to use extern inline; if we are using a new GCC with the
which c99 defines to mean more-or-less the same as the Gnu C C99-compatible behaviour, or a non-GCC compiler (which we will
'extern inline'. */ 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__) #if defined(__GNUC__) && !defined(__GNUC_STDC_INLINE__)
/* We're using GCC, but without the new C99-compatible behaviour. */ /* We're using GCC, but without the new C99-compatible behaviour. */
#define _ELIDABLE_INLINE extern __inline__ _ATTRIBUTE ((__always_inline__)) #define _ELIDABLE_INLINE extern __inline__ _ATTRIBUTE ((__always_inline__))
#else #else
/* We're using GCC in C99 mode, or an unknown compiler which /* We're using GCC in C99 mode, or an unknown compiler which
we just have to hope obeys the C99 semantics of inline. */ we just have to hope obeys the C99 semantics of inline. */
#define _ELIDABLE_INLINE __inline__ #define _ELIDABLE_INLINE static __inline__
#endif #endif
#endif /* _ANSIDECL_H_ */ #endif /* _ANSIDECL_H_ */