mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
update libcxx to 9.0.0-rc2
upstream commit 67a4a12d61bfb10b2410b53c5a43ef9b4a03de7d
This commit is contained in:
parent
37a06f4dcf
commit
8bb6bf6818
3 changed files with 89 additions and 72 deletions
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
#include <__config>
|
#include <__config>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
#include <iosfwd>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
|
#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
|
||||||
|
|
@ -394,6 +395,86 @@ int __libcpp_tls_set(__libcpp_tls_key __key, void *__p)
|
||||||
|
|
||||||
#endif // !_LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL || _LIBCPP_BUILDING_THREAD_LIBRARY_EXTERNAL
|
#endif // !_LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL || _LIBCPP_BUILDING_THREAD_LIBRARY_EXTERNAL
|
||||||
|
|
||||||
|
class _LIBCPP_TYPE_VIS thread;
|
||||||
|
class _LIBCPP_TYPE_VIS __thread_id;
|
||||||
|
|
||||||
|
namespace this_thread
|
||||||
|
{
|
||||||
|
|
||||||
|
_LIBCPP_INLINE_VISIBILITY __thread_id get_id() _NOEXCEPT;
|
||||||
|
|
||||||
|
} // this_thread
|
||||||
|
|
||||||
|
template<> struct hash<__thread_id>;
|
||||||
|
|
||||||
|
class _LIBCPP_TEMPLATE_VIS __thread_id
|
||||||
|
{
|
||||||
|
// FIXME: pthread_t is a pointer on Darwin but a long on Linux.
|
||||||
|
// NULL is the no-thread value on Darwin. Someone needs to check
|
||||||
|
// on other platforms. We assume 0 works everywhere for now.
|
||||||
|
__libcpp_thread_id __id_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
|
__thread_id() _NOEXCEPT : __id_(0) {}
|
||||||
|
|
||||||
|
friend _LIBCPP_INLINE_VISIBILITY
|
||||||
|
bool operator==(__thread_id __x, __thread_id __y) _NOEXCEPT
|
||||||
|
{ // don't pass id==0 to underlying routines
|
||||||
|
if (__x.__id_ == 0) return __y.__id_ == 0;
|
||||||
|
if (__y.__id_ == 0) return false;
|
||||||
|
return __libcpp_thread_id_equal(__x.__id_, __y.__id_);
|
||||||
|
}
|
||||||
|
friend _LIBCPP_INLINE_VISIBILITY
|
||||||
|
bool operator!=(__thread_id __x, __thread_id __y) _NOEXCEPT
|
||||||
|
{return !(__x == __y);}
|
||||||
|
friend _LIBCPP_INLINE_VISIBILITY
|
||||||
|
bool operator< (__thread_id __x, __thread_id __y) _NOEXCEPT
|
||||||
|
{ // id==0 is always less than any other thread_id
|
||||||
|
if (__x.__id_ == 0) return __y.__id_ != 0;
|
||||||
|
if (__y.__id_ == 0) return false;
|
||||||
|
return __libcpp_thread_id_less(__x.__id_, __y.__id_);
|
||||||
|
}
|
||||||
|
friend _LIBCPP_INLINE_VISIBILITY
|
||||||
|
bool operator<=(__thread_id __x, __thread_id __y) _NOEXCEPT
|
||||||
|
{return !(__y < __x);}
|
||||||
|
friend _LIBCPP_INLINE_VISIBILITY
|
||||||
|
bool operator> (__thread_id __x, __thread_id __y) _NOEXCEPT
|
||||||
|
{return __y < __x ;}
|
||||||
|
friend _LIBCPP_INLINE_VISIBILITY
|
||||||
|
bool operator>=(__thread_id __x, __thread_id __y) _NOEXCEPT
|
||||||
|
{return !(__x < __y);}
|
||||||
|
|
||||||
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
|
void __reset() { __id_ = 0; }
|
||||||
|
|
||||||
|
template<class _CharT, class _Traits>
|
||||||
|
friend
|
||||||
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
|
basic_ostream<_CharT, _Traits>&
|
||||||
|
operator<<(basic_ostream<_CharT, _Traits>& __os, __thread_id __id);
|
||||||
|
|
||||||
|
private:
|
||||||
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
|
__thread_id(__libcpp_thread_id __id) : __id_(__id) {}
|
||||||
|
|
||||||
|
friend __thread_id this_thread::get_id() _NOEXCEPT;
|
||||||
|
friend class _LIBCPP_TYPE_VIS thread;
|
||||||
|
friend struct _LIBCPP_TEMPLATE_VIS hash<__thread_id>;
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace this_thread
|
||||||
|
{
|
||||||
|
|
||||||
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
|
__thread_id
|
||||||
|
get_id() _NOEXCEPT
|
||||||
|
{
|
||||||
|
return __libcpp_thread_get_current_id();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // this_thread
|
||||||
|
|
||||||
_LIBCPP_END_NAMESPACE_STD
|
_LIBCPP_END_NAMESPACE_STD
|
||||||
|
|
||||||
_LIBCPP_POP_MACROS
|
_LIBCPP_POP_MACROS
|
||||||
|
|
|
||||||
|
|
@ -280,7 +280,7 @@ class _LIBCPP_TYPE_VIS recursive_timed_mutex
|
||||||
mutex __m_;
|
mutex __m_;
|
||||||
condition_variable __cv_;
|
condition_variable __cv_;
|
||||||
size_t __count_;
|
size_t __count_;
|
||||||
__libcpp_thread_id __id_;
|
__thread_id __id_;
|
||||||
public:
|
public:
|
||||||
recursive_timed_mutex();
|
recursive_timed_mutex();
|
||||||
~recursive_timed_mutex();
|
~recursive_timed_mutex();
|
||||||
|
|
@ -307,9 +307,9 @@ bool
|
||||||
recursive_timed_mutex::try_lock_until(const chrono::time_point<_Clock, _Duration>& __t)
|
recursive_timed_mutex::try_lock_until(const chrono::time_point<_Clock, _Duration>& __t)
|
||||||
{
|
{
|
||||||
using namespace chrono;
|
using namespace chrono;
|
||||||
__libcpp_thread_id __id = __libcpp_thread_get_current_id();
|
__thread_id __id = this_thread::get_id();
|
||||||
unique_lock<mutex> lk(__m_);
|
unique_lock<mutex> lk(__m_);
|
||||||
if (__libcpp_thread_id_equal(__id, __id_))
|
if (__id == __id_)
|
||||||
{
|
{
|
||||||
if (__count_ == numeric_limits<size_t>::max())
|
if (__count_ == numeric_limits<size_t>::max())
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -200,64 +200,6 @@ __thread_specific_ptr<_Tp>::set_pointer(pointer __p)
|
||||||
__libcpp_tls_set(__key_, __p);
|
__libcpp_tls_set(__key_, __p);
|
||||||
}
|
}
|
||||||
|
|
||||||
class _LIBCPP_TYPE_VIS thread;
|
|
||||||
class _LIBCPP_TYPE_VIS __thread_id;
|
|
||||||
|
|
||||||
namespace this_thread
|
|
||||||
{
|
|
||||||
|
|
||||||
_LIBCPP_INLINE_VISIBILITY __thread_id get_id() _NOEXCEPT;
|
|
||||||
|
|
||||||
} // this_thread
|
|
||||||
|
|
||||||
template<> struct hash<__thread_id>;
|
|
||||||
|
|
||||||
class _LIBCPP_TEMPLATE_VIS __thread_id
|
|
||||||
{
|
|
||||||
// FIXME: pthread_t is a pointer on Darwin but a long on Linux.
|
|
||||||
// NULL is the no-thread value on Darwin. Someone needs to check
|
|
||||||
// on other platforms. We assume 0 works everywhere for now.
|
|
||||||
__libcpp_thread_id __id_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
|
||||||
__thread_id() _NOEXCEPT : __id_(0) {}
|
|
||||||
|
|
||||||
friend _LIBCPP_INLINE_VISIBILITY
|
|
||||||
bool operator==(__thread_id __x, __thread_id __y) _NOEXCEPT
|
|
||||||
{return __libcpp_thread_id_equal(__x.__id_, __y.__id_);}
|
|
||||||
friend _LIBCPP_INLINE_VISIBILITY
|
|
||||||
bool operator!=(__thread_id __x, __thread_id __y) _NOEXCEPT
|
|
||||||
{return !(__x == __y);}
|
|
||||||
friend _LIBCPP_INLINE_VISIBILITY
|
|
||||||
bool operator< (__thread_id __x, __thread_id __y) _NOEXCEPT
|
|
||||||
{return __libcpp_thread_id_less(__x.__id_, __y.__id_);}
|
|
||||||
friend _LIBCPP_INLINE_VISIBILITY
|
|
||||||
bool operator<=(__thread_id __x, __thread_id __y) _NOEXCEPT
|
|
||||||
{return !(__y < __x);}
|
|
||||||
friend _LIBCPP_INLINE_VISIBILITY
|
|
||||||
bool operator> (__thread_id __x, __thread_id __y) _NOEXCEPT
|
|
||||||
{return __y < __x ;}
|
|
||||||
friend _LIBCPP_INLINE_VISIBILITY
|
|
||||||
bool operator>=(__thread_id __x, __thread_id __y) _NOEXCEPT
|
|
||||||
{return !(__x < __y);}
|
|
||||||
|
|
||||||
template<class _CharT, class _Traits>
|
|
||||||
friend
|
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
|
||||||
basic_ostream<_CharT, _Traits>&
|
|
||||||
operator<<(basic_ostream<_CharT, _Traits>& __os, __thread_id __id)
|
|
||||||
{return __os << __id.__id_;}
|
|
||||||
|
|
||||||
private:
|
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
|
||||||
__thread_id(__libcpp_thread_id __id) : __id_(__id) {}
|
|
||||||
|
|
||||||
friend __thread_id this_thread::get_id() _NOEXCEPT;
|
|
||||||
friend class _LIBCPP_TYPE_VIS thread;
|
|
||||||
friend struct _LIBCPP_TEMPLATE_VIS hash<__thread_id>;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
struct _LIBCPP_TEMPLATE_VIS hash<__thread_id>
|
struct _LIBCPP_TEMPLATE_VIS hash<__thread_id>
|
||||||
: public unary_function<__thread_id, size_t>
|
: public unary_function<__thread_id, size_t>
|
||||||
|
|
@ -269,17 +211,11 @@ struct _LIBCPP_TEMPLATE_VIS hash<__thread_id>
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace this_thread
|
template<class _CharT, class _Traits>
|
||||||
{
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
|
basic_ostream<_CharT, _Traits>&
|
||||||
inline _LIBCPP_INLINE_VISIBILITY
|
operator<<(basic_ostream<_CharT, _Traits>& __os, __thread_id __id)
|
||||||
__thread_id
|
{return __os << __id.__id_;}
|
||||||
get_id() _NOEXCEPT
|
|
||||||
{
|
|
||||||
return __libcpp_thread_get_current_id();
|
|
||||||
}
|
|
||||||
|
|
||||||
} // this_thread
|
|
||||||
|
|
||||||
class _LIBCPP_TYPE_VIS thread
|
class _LIBCPP_TYPE_VIS thread
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue