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]

[PATCH v2] Make __extern_always_inline usable on clang++ again


On Tue, Sep 16, 2014 at 12:41:46PM +0200, Jakub Jelinek wrote:
> s/fot/for/; why are you using a separate hunk for clang instead of using the
> earlier one?

I thought it looked ugly when I wrote the entire conditional in one
place but I notice now (since you pointed it out) that it actually
makes things wrong.

> > +#if !defined __extern_always_inline && defined __clang__
> > +# 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__))
> > +# else
> > +#  define __extern_inline extern __inline
> > +#  define __extern_always_inline extern __always_inline
> 
> This doesn't look right.  If you have clang that doesn't have gnu_inline
> support, in C++ extern __inline definitely is not the right semantics.
> You don't want to define the macros then.

Here's the updated patch, again tested with the same program.

Siddhesh

	[BZ #17266]
	* misc/sys/cdefs.h: Define __extern_always_inline for clang
	4.2 and newer.


diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
index d8ee73c..6a789e7 100644
--- a/misc/sys/cdefs.h
+++ b/misc/sys/cdefs.h
@@ -318,8 +318,14 @@
 #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)
+   inline semantics, unless -fgnu89-inline is used.
+
+   clang++ identifies itself as gcc-4.2, but has support for GNU inlining
+   semantics, that can be checked for by using the __GNUC_STDC_INLINE_ and
+   __GNUC_GNU_INLINE__ macro definitions.  */
+#if (!defined __cplusplus || __GNUC_PREREQ (4,3) \
+     || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \
+			       || defined __GNUC_GNU_INLINE__)))
 # if defined __GNUC_STDC_INLINE__ || defined __cplusplus
 #  define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
 #  define __extern_always_inline \

Attachment: pgpGj2BTJwh66.pgp
Description: PGP signature


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