diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2009-04-04 15:44:19 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2009-04-04 15:44:19 +0000 |
commit | 56c5c08a5dc6c3846f4e799ba3c9c32fa69c64e3 (patch) | |
tree | 0757a94b6613b22946c0b3fbdfb2b7de7ba421a6 /newlib/libc/include/_ansi.h | |
parent | d74c61c2be2153174cfbcafa451e79b3ca51153f (diff) | |
download | cygnal-56c5c08a5dc6c3846f4e799ba3c9c32fa69c64e3.tar.gz cygnal-56c5c08a5dc6c3846f4e799ba3c9c32fa69c64e3.tar.bz2 cygnal-56c5c08a5dc6c3846f4e799ba3c9c32fa69c64e3.zip |
* libc/include/stdio.h (_ELIDABLE_INLINE): Move definition from here...
* libc/include/_ansi.h (_ELIDABLE_INLINE): ..to here.
Diffstat (limited to 'newlib/libc/include/_ansi.h')
-rw-r--r-- | newlib/libc/include/_ansi.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/newlib/libc/include/_ansi.h b/newlib/libc/include/_ansi.h index a3f0334e3..3ece8e184 100644 --- a/newlib/libc/include/_ansi.h +++ b/newlib/libc/include/_ansi.h @@ -79,6 +79,27 @@ #define _ATTRIBUTE(attrs) #endif +/* The traditional meaning of 'extern inline' for GCC is not + 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'. */ +#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__ +#endif + /* ISO C++. */ #ifdef __cplusplus |