[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