Check subrange liveness at rematerialization
[llvm-project.git] / libcxx / src / random_shuffle.cpp
blobdf9b7d53c8475b2e57c67effe8808bafd050a95b
1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
9 #include "algorithm"
10 #include "random"
11 #ifndef _LIBCPP_HAS_NO_THREADS
12 # include "mutex"
13 # if defined(__ELF__) && defined(_LIBCPP_LINK_PTHREAD_LIB)
14 # pragma comment(lib, "pthread")
15 # endif
16 #endif
18 _LIBCPP_BEGIN_NAMESPACE_STD
20 #ifndef _LIBCPP_HAS_NO_THREADS
21 _LIBCPP_SAFE_STATIC static __libcpp_mutex_t __rs_mut = _LIBCPP_MUTEX_INITIALIZER;
22 #endif
23 unsigned __rs_default::__c_ = 0;
25 __rs_default::__rs_default()
27 #ifndef _LIBCPP_HAS_NO_THREADS
28 __libcpp_mutex_lock(&__rs_mut);
29 #endif
30 __c_ = 1;
33 __rs_default::__rs_default(const __rs_default&)
35 ++__c_;
38 __rs_default::~__rs_default()
40 #ifndef _LIBCPP_HAS_NO_THREADS
41 if (--__c_ == 0)
42 __libcpp_mutex_unlock(&__rs_mut);
43 #else
44 --__c_;
45 #endif
48 __rs_default::result_type
49 __rs_default::operator()()
51 static mt19937 __rs_g;
52 return __rs_g();
55 __rs_default
56 __rs_get()
58 return __rs_default();
61 _LIBCPP_END_NAMESPACE_STD