Modify ctype.h headers to test for non-GNU inline semantics correctly

GCC and Clang will not define __GNUC_STDC_INLINE__ when compiling C++, so this
macro currently implies regular C++ inline semantics in C++. This may cause
the compiler to emit an external definition of the function, which will cause
link errors when compiling with -fvisibility=hidden; see e.g. crbug.com/481902.

To fix this, also test the __cplusplus macro when deciding whether to assume
non-GNU inline semantics.

Change-Id: Icbd1f42279c2f65610e62f21d4a0a09d3b0e091c
This commit is contained in:
Peter Collingbourne
2015-05-13 17:32:57 -07:00
parent 2d7242f207
commit c90758f420

View File

@@ -59,7 +59,7 @@ extern const short *_toupper_tab_;
/* extern __inline is a GNU C extension */
#ifdef __GNUC__
# if defined(__GNUC_STDC_INLINE__)
# if defined(__GNUC_STDC_INLINE__) || defined(__cplusplus) || defined(__cplusplus)
#define __CTYPE_INLINE extern __inline __attribute__((__gnu_inline__))
# else
#define __CTYPE_INLINE extern __inline