[libcxx-commits] [libcxx] 3b5530c - [libc++] Avoid including <semaphore.h> on Apple
Louis Dionne via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Feb 25 14:53:11 PST 2020
Author: Louis Dionne
Date: 2020-02-25T17:52:34-05:00
New Revision: 3b5530cf9647cf79ee45aef42c4f5fa7cc9acfd9
URL: https://github.com/llvm/llvm-project/commit/3b5530cf9647cf79ee45aef42c4f5fa7cc9acfd9
DIFF: https://github.com/llvm/llvm-project/commit/3b5530cf9647cf79ee45aef42c4f5fa7cc9acfd9.diff
LOG: [libc++] Avoid including <semaphore.h> on Apple
It turns out that <semaphore.h> is not well-behaved, as it transitively
includes <sys/param.h>, and that one defines several non-reserved macros
that clash with some downstream projects in modular builds. For the time
being, using <sys/semaphore.h> instead gives us the declarations we need
without the macros.
rdar://59744472
Added:
Modified:
libcxx/include/__threading_support
Removed:
################################################################################
diff --git a/libcxx/include/__threading_support b/libcxx/include/__threading_support
index d2ee0c693a15..8dc6f11782d7 100644
--- a/libcxx/include/__threading_support
+++ b/libcxx/include/__threading_support
@@ -26,7 +26,15 @@
#if defined(_LIBCPP_HAS_THREAD_API_PTHREAD)
# include <pthread.h>
# include <sched.h>
+// FIXME: On Apple, <semaphore.h> transitively includes <sys/param.h>, which
+// is not well behaved because it defines several macros. This causes
+// name collisions in some downstream projects. Instead, <sys/semaphore.h>
+// gives us the declarations we need without the bad stuff.
+#ifdef __APPLE__
+# include <sys/semaphore.h>
+#else
# include <semaphore.h>
+#endif
# ifdef __APPLE__
# define _LIBCPP_NO_NATIVE_SEMAPHORES
# endif
More information about the libcxx-commits
mailing list