(__extern_inline, __extern_always_inline): Only define in C++ for GCC
authordrepper <drepper>
Sat, 15 Sep 2007 02:33:27 +0000 (02:33 +0000)
committerdrepper <drepper>
Sat, 15 Sep 2007 02:33:27 +0000 (02:33 +0000)
4.3+, in C++ always use __gnu_inline__ attribute.

(__va_arg_pack): Define for GCC 4.3+.

misc/sys/cdefs.h

index ab7d327..bacfe2f 100644 (file)
 
 /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
    inline semantics, unless -fgnu89-inline is used.  */
-#ifdef __GNUC_STDC_INLINE__
-# define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
-# define __extern_always_inline \
+#if !defined __cplusplus || __GNUC_PREREQ (4,3)
+# if defined __GNUC_STDC_INLINE__ || defined __cplusplus
+#  define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
+#  define __extern_always_inline \
   extern __always_inline __attribute__ ((__gnu_inline__))
-#else
-# define __extern_inline extern __inline
-# define __extern_always_inline extern __always_inline
+# else
+#  define __extern_inline extern __inline
+#  define __extern_always_inline extern __always_inline
+# endif
+#endif
+
+/* GCC 4.3 and above allow passing all anonymous arguments of an
+   __extern_always_inline function to some other vararg function.  */
+#if __GNUC_PREREQ (4,3)
+# define __va_arg_pack() __builtin_va_arg_pack ()
 #endif
 
 /* It is possible to compile containing GCC extensions even if GCC is