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.

llvm-svn: 367316
This commit is contained in:
Nico Weber 2019-07-30 14:32:47 +00:00
parent 9ad716ed39
commit 9aae539d4c
3 changed files with 11 additions and 5 deletions

View File

@ -1097,6 +1097,14 @@ _LIBCPP_FUNC_VIS extern "C" void __sanitizer_annotate_contiguous_container(
_LIBCPP_HAS_NO_THREADS is defined. _LIBCPP_HAS_NO_THREADS is defined.
#endif #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 // The glibc and Bionic implementation of pthreads implements
// pthread_mutex_destroy as nop for regular mutexes. Additionally, Win32 // pthread_mutex_destroy as nop for regular mutexes. Additionally, Win32
// mutexes have no destroy mechanism. // mutexes have no destroy mechanism.

View File

@ -14,8 +14,6 @@
thread synopsis thread synopsis
#define __STDCPP_THREADS__ __cplusplus
namespace std namespace std
{ {
@ -107,8 +105,6 @@ void sleep_for(const chrono::duration<Rep, Period>& rel_time);
_LIBCPP_PUSH_MACROS _LIBCPP_PUSH_MACROS
#include <__undef_macros> #include <__undef_macros>
#define __STDCPP_THREADS__ __cplusplus
#ifdef _LIBCPP_HAS_NO_THREADS #ifdef _LIBCPP_HAS_NO_THREADS
#error <thread> is not supported on this single threaded system #error <thread> is not supported on this single threaded system
#else // !_LIBCPP_HAS_NO_THREADS #else // !_LIBCPP_HAS_NO_THREADS

View File

@ -10,7 +10,7 @@
// <thread> // <thread>
// #define __STDCPP_THREADS__ __cplusplus // #define __STDCPP_THREADS__ 1
#include <thread> #include <thread>
@ -20,6 +20,8 @@ int main(int, char**)
{ {
#ifndef __STDCPP_THREADS__ #ifndef __STDCPP_THREADS__
#error __STDCPP_THREADS__ is not defined #error __STDCPP_THREADS__ is not defined
#elif __STDCPP_THREADS__ != 1
#error __STDCPP_THREADS__ has the wrong value
#endif #endif
return 0; return 0;