From 384608e90d42cd8111b78efdea30fe06df19226a Mon Sep 17 00:00:00 2001 From: Howard Hinnant Date: Sat, 7 Jul 2012 20:01:52 +0000 Subject: [PATCH] Apply constexpr to the mutex constructor. As a conforming extension, apply constexpr to the condition_variable constructor. These are important because it enables the compiler to construct these types at compile time, even though the object will be non-const. Since they are constructed at compile time, there is no chance of a data race before they are constructed. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@159901 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/__mutex_base | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/include/__mutex_base b/include/__mutex_base index 5410272b4..854f02c43 100644 --- a/include/__mutex_base +++ b/include/__mutex_base @@ -38,7 +38,11 @@ class _LIBCPP_VISIBLE mutex public: _LIBCPP_INLINE_VISIBILITY +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + constexpr mutex() : __m_ PTHREAD_MUTEX_INITIALIZER {} +#else mutex() {__m_ = (pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER;} +#endif ~mutex(); private: @@ -297,7 +301,11 @@ class _LIBCPP_VISIBLE condition_variable pthread_cond_t __cv_; public: _LIBCPP_INLINE_VISIBILITY +#ifndef _LIBCPP_HAS_NO_CONSTEXPR + constexpr condition_variable() : __cv_ PTHREAD_COND_INITIALIZER {} +#else condition_variable() {__cv_ = (pthread_cond_t)PTHREAD_COND_INITIALIZER;} +#endif ~condition_variable(); private: