diff options
author | Siddhesh Poyarekar <siddhesh@redhat.com> | 2014-09-16 22:16:01 +0530 |
---|---|---|
committer | Siddhesh Poyarekar <siddhesh@redhat.com> | 2014-09-16 22:16:01 +0530 |
commit | 602f80ec8b966cfad3b61914cbe14ee606cedf6e (patch) | |
tree | d145754de1cdfebb3d9acec2a37890ddb9218a66 /nptl/tst-initializers1.c | |
parent | 545583d664b64ff234b99aca0d85e99c8a55808f (diff) | |
download | glibc-602f80ec8b966cfad3b61914cbe14ee606cedf6e.tar.gz glibc-602f80ec8b966cfad3b61914cbe14ee606cedf6e.tar.xz glibc-602f80ec8b966cfad3b61914cbe14ee606cedf6e.zip |
Make __extern_always_inline usable on clang++ again
The fix for BZ #17266 (884ddc5081278f488ef8cd49951f41cfdbb480ce) removed changes that had gone into cdefs.h to make __extern_always_inline usable with clang++. This patch adds back support for clang to detect if GNU inlining semantics are available, this time without breaking the gcc use case. The check put here is based on the earlier patch and assertion[1] that checking if __GNUC_STDC_INLINE__ or __GNUC_GNU_INLINE__ is defined is sufficient to determine that clang++ suports GNU inlining semantics. Tested with a simple program that builds with __extern_always_inline with the patch and fails compilation without it. #include <stdio.h> #include <sys/cdefs.h> extern void foo_alias (void) __asm ("foo"); __extern_always_inline void foo (void) { puts ("hi oh world!"); return foo_alias (); } void foo_alias (void) { puts ("hell oh world"); } int main () { foo (); } [1] https://sourceware.org/ml/libc-alpha/2012-12/msg00306.html [BZ #17266] * misc/sys/cdefs.h: Define __extern_always_inline for clang 4.2 and newer.
Diffstat (limited to 'nptl/tst-initializers1.c')
0 files changed, 0 insertions, 0 deletions