mirror of
git://sourceware.org/git/glibc.git
synced 2025-02-23 13:09:58 +08:00
Use __gnu_inline__ for __extern_always_inline in g++-4.2
Use the __gnu_inline__ attribute in _FORTIFY_SOURCE's __extern_always_inline macro whenever the compiler supports it. Previously this macro only included the __gnu_inline__ attribute in C++ mode for gcc >= 4.3. However, __gnu_inline__ semantics are always desired for the __extern_always_inline functions, and are available in g++ 4.2 (and some releases of g++ 4.1, and also in Clang, which claims to be g++ 4.2). This change stops g++-4.2 from emitting weak definitions for the fortify wrapper functions if they can't be inlined, and also improves Clang compatibility.
This commit is contained in:
parent
10de07f5fd
commit
0695940b8a
@ -1,3 +1,11 @@
|
|||||||
|
2013-05-01 Richard Smith <richard@metafoo.co.uk>
|
||||||
|
|
||||||
|
* misc/sys/cdefs.h (__extern_inline, __extern_always_inline)
|
||||||
|
[__GNUC__ && (__GNUC_STDC_INLINE__ || __GNUC_GNU_INLINE__)]:
|
||||||
|
Use __attribute__ ((__gnu_inline__)).
|
||||||
|
[__GNUC__ && !(__GNUC_STDC_INLINE__ || __GNUC_GNU_INLINE__)]:
|
||||||
|
Don't use __attribute__ ((__gnu_inline__)).
|
||||||
|
|
||||||
2013-05-01 Joseph Myers <joseph@codesourcery.com>
|
2013-05-01 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
[BZ #15423]
|
[BZ #15423]
|
||||||
|
@ -318,10 +318,12 @@
|
|||||||
# define __attribute_artificial__ /* Ignore */
|
# define __attribute_artificial__ /* Ignore */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
|
#ifdef __GNUC__
|
||||||
inline semantics, unless -fgnu89-inline is used. */
|
/* One of these will be defined if the __gnu_inline__ attribute is
|
||||||
#if (!defined __cplusplus || __GNUC_PREREQ (4,3)) && defined __GNUC__
|
available. In C++, __GNUC_GNU_INLINE__ will be defined even though
|
||||||
# if defined __GNUC_STDC_INLINE__ || defined __cplusplus
|
__inline does not use the GNU inlining rules. If neither macro is
|
||||||
|
defined, this version of GCC only supports GNU inline semantics. */
|
||||||
|
# if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
|
||||||
# define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
|
# define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
|
||||||
# define __extern_always_inline \
|
# define __extern_always_inline \
|
||||||
extern __always_inline __attribute__ ((__gnu_inline__))
|
extern __always_inline __attribute__ ((__gnu_inline__))
|
||||||
@ -329,10 +331,6 @@
|
|||||||
# define __extern_inline extern __inline
|
# define __extern_inline extern __inline
|
||||||
# define __extern_always_inline extern __always_inline
|
# define __extern_always_inline extern __always_inline
|
||||||
# endif
|
# endif
|
||||||
#elif defined __GNUC__ /* C++ and GCC <4.3. */
|
|
||||||
# define __extern_inline extern __inline
|
|
||||||
# define __extern_always_inline \
|
|
||||||
extern __always_inline
|
|
||||||
#else /* Not GCC. */
|
#else /* Not GCC. */
|
||||||
# define __extern_inline /* Ignore */
|
# define __extern_inline /* Ignore */
|
||||||
# define __extern_always_inline /* Ignore */
|
# define __extern_always_inline /* Ignore */
|
||||||
|
Loading…
Reference in New Issue
Block a user