This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Use __gnu_inline__ for __extern_always_inline in g++-4.2


On Thu, Jan 31, 2013 at 10:18 AM, Roland McGrath <roland@hack.frob.com> wrote:
> Please see the wiki contribution checklist about how to post log entries
> with patches properly.
>
> A log entry changing #if conditions needs to mention explicitly the symbols
> being tested, not just describe the change in the abstract.

Thank you, I hope this is what you had in mind.

2013-01-31  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__)).

--- a/misc/sys/cdefs.h
+++ b/misc/sys/cdefs.h
@@ -317,10 +317,12 @@
 # define __attribute_artificial__ /* Ignore */
 #endif

-/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
-   inline semantics, unless -fgnu89-inline is used.  */
-#if (!defined __cplusplus || __GNUC_PREREQ (4,3)) && defined __GNUC__
-# if defined __GNUC_STDC_INLINE__ || defined __cplusplus
+#ifdef __GNUC__
+/* One of these will be defined if the __gnu_inline__ attribute is
+   available.  In C++, __GNUC_GNU_INLINE__ will be defined even though
+   __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_always_inline \
   extern __always_inline __attribute__ ((__gnu_inline__))
@@ -328,10 +330,6 @@
 #  define __extern_inline extern __inline
 #  define __extern_always_inline extern __always_inline
 # endif
-#elif defined __GNUC__ /* C++ and GCC <4.3.  */
-# define __extern_inline extern __inline
-# define __extern_always_inline \
-  extern __always_inline
 #else /* Not GCC.  */
 # define __extern_inline  /* Ignore */
 # define __extern_always_inline /* Ignore */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]