libcxx: Define __STDCPP_THREADS__ to 1, not to __cplusplus.
[cpp.predefined]p2:
__STDCPP_THREADS__
Defined, and has the value integer literal 1, if and only if a program
can have more than one thread of execution .
Also define it only if it's not defined already, since it's supposed
to be defined by the compiler.
Also move it from thread to __config (which requires setting it only
if _LIBCPP_HAS_NO_THREADS is not defined).
Part of PR33230. The intent is to eventually make the compiler define
this instead.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@367316 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/__config b/include/__config
index 682b990..e49adb4 100644
--- a/include/__config
+++ b/include/__config
@@ -1097,6 +1097,14 @@
_LIBCPP_HAS_NO_THREADS is defined.
#endif
+#if defined(__STDCPP_THREADS__) && defined(_LIBCPP_HAS_NO_THREADS)
+#error _LIBCPP_HAS_NO_THREADS cannot be set when __STDCPP_THREADS__ is set.
+#endif
+
+#if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(__STDCPP_THREADS__)
+#define __STDCPP_THREADS__ 1
+#endif
+
// The glibc and Bionic implementation of pthreads implements
// pthread_mutex_destroy as nop for regular mutexes. Additionally, Win32
// mutexes have no destroy mechanism.
diff --git a/include/thread b/include/thread
index 3d8d2ac..4277bc9 100644
--- a/include/thread
+++ b/include/thread
@@ -14,8 +14,6 @@
thread synopsis
-#define __STDCPP_THREADS__ __cplusplus
-
namespace std
{
@@ -107,8 +105,6 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-#define __STDCPP_THREADS__ __cplusplus
-
#ifdef _LIBCPP_HAS_NO_THREADS
#error <thread> is not supported on this single threaded system
#else // !_LIBCPP_HAS_NO_THREADS
diff --git a/test/std/thread/macro.pass.cpp b/test/std/thread/macro.pass.cpp
index 0c16a0d..5d24d5f 100644
--- a/test/std/thread/macro.pass.cpp
+++ b/test/std/thread/macro.pass.cpp
@@ -10,7 +10,7 @@
// <thread>
-// #define __STDCPP_THREADS__ __cplusplus
+// #define __STDCPP_THREADS__ 1
#include <thread>
@@ -20,6 +20,8 @@
{
#ifndef __STDCPP_THREADS__
#error __STDCPP_THREADS__ is not defined
+#elif __STDCPP_THREADS__ != 1
+#error __STDCPP_THREADS__ has the wrong value
#endif
return 0;