summaryrefslogtreecommitdiff
path: root/system/lib/libcxx
diff options
context:
space:
mode:
Diffstat (limited to 'system/lib/libcxx')
-rw-r--r--system/lib/libcxx/CREDITS.TXT91
-rw-r--r--system/lib/libcxx/LICENSE.txt4
-rw-r--r--system/lib/libcxx/Makefile33
-rw-r--r--system/lib/libcxx/chrono.cpp10
-rw-r--r--system/lib/libcxx/condition_variable.cpp23
-rw-r--r--system/lib/libcxx/debug.cpp129
-rw-r--r--system/lib/libcxx/exception.cpp114
-rw-r--r--system/lib/libcxx/future.cpp10
-rw-r--r--system/lib/libcxx/hash.cpp23
-rw-r--r--system/lib/libcxx/ios.cpp2
-rw-r--r--system/lib/libcxx/iostream.cpp65
-rw-r--r--system/lib/libcxx/locale.cpp1006
-rw-r--r--system/lib/libcxx/memory.cpp63
-rw-r--r--system/lib/libcxx/mutex.cpp20
-rw-r--r--system/lib/libcxx/new.cpp34
-rw-r--r--system/lib/libcxx/random.cpp5
-rw-r--r--system/lib/libcxx/readme.txt2
-rw-r--r--system/lib/libcxx/regex.cpp10
-rw-r--r--system/lib/libcxx/stdexcept.cpp24
-rw-r--r--system/lib/libcxx/string.cpp174
-rw-r--r--system/lib/libcxx/strstream.cpp10
-rw-r--r--system/lib/libcxx/support/solaris/README4
-rw-r--r--system/lib/libcxx/support/solaris/mbsnrtowcs.inc76
-rw-r--r--system/lib/libcxx/support/solaris/wcsnrtombs.inc93
-rw-r--r--system/lib/libcxx/support/solaris/xlocale.c245
-rw-r--r--system/lib/libcxx/support/win32/locale_win32.cpp94
-rw-r--r--system/lib/libcxx/support/win32/support.cpp70
-rw-r--r--system/lib/libcxx/symbols766
-rw-r--r--system/lib/libcxx/thread.cpp39
-rw-r--r--system/lib/libcxx/typeinfo.cpp14
-rw-r--r--system/lib/libcxx/utility.cpp1
31 files changed, 2102 insertions, 1152 deletions
diff --git a/system/lib/libcxx/CREDITS.TXT b/system/lib/libcxx/CREDITS.TXT
new file mode 100644
index 00000000..52948510
--- /dev/null
+++ b/system/lib/libcxx/CREDITS.TXT
@@ -0,0 +1,91 @@
+This file is a partial list of people who have contributed to the LLVM/libc++
+project. If you have contributed a patch or made some other contribution to
+LLVM/libc++, please submit a patch to this file to add yourself, and it will be
+done!
+
+The list is sorted by surname and formatted to allow easy grepping and
+beautification by scripts. The fields are: name (N), email (E), web-address
+(W), PGP key ID and fingerprint (P), description (D), and snail-mail address
+(S).
+
+N: Saleem Abdulrasool
+E: compnerd@compnerd.org
+D: Minor patches and Linux fixes.
+
+N: Dimitry Andric
+E: dimitry@andric.com
+D: Visibility fixes, minor FreeBSD portability patches.
+
+N: Holger Arnold
+E: holgerar@gmail.com
+D: Minor fix.
+
+N: Ruben Van Boxem
+E: vanboxem dot ruben at gmail dot com
+D: Initial Windows patches.
+
+N: David Chisnall
+E: theraven at theravensnest dot org
+D: FreeBSD and Solaris ports, libcxxrt support, some atomics work.
+
+N: Marshall Clow
+E: mclow.lists@gmail.com
+E: marshall@idio.com
+D: Minor patches and bug fixes.
+
+N: Google Inc.
+D: Copyright owner and contributor of the CityHash algorithm
+
+N: Howard Hinnant
+E: hhinnant@apple.com
+D: Architect and primary author of libc++
+
+N: Hyeon-bin Jeong
+E: tuhertz@gmail.com
+D: Minor patches and bug fixes.
+
+N: Argyrios Kyrtzidis
+E: kyrtzidis@apple.com
+D: Bug fixes.
+
+N: Michel Morin
+E: mimomorin@gmail.com
+D: Minor patches to is_convertible.
+
+N: Andrew Morrow
+E: andrew.c.morrow@gmail.com
+D: Minor patches and Linux fixes.
+
+N: Arvid Picciani
+E: aep at exys dot org
+D: Minor patches and musl port.
+
+N: Bjorn Reese
+E: breese@users.sourceforge.net
+D: Initial regex prototype
+
+N: Jonathan Sauer
+D: Minor patches, mostly related to constexpr
+
+N: Craig Silverstein
+E: csilvers@google.com
+D: Implemented Cityhash as the string hash function on 64-bit machines
+
+N: Richard Smith
+D: Minor patches.
+
+N: Michael van der Westhuizen
+E: r1mikey at gmail dot com
+
+N: Klaas de Vries
+E: klaas at klaasgaaf dot nl
+D: Minor bug fix.
+
+N: Zhang Xiongpang
+E: zhangxiongpang@gmail.com
+D: Minor patches and bug fixes.
+
+N: Jeffrey Yasskin
+E: jyasskin@gmail.com
+E: jyasskin@google.com
+D: Linux fixes.
diff --git a/system/lib/libcxx/LICENSE.txt b/system/lib/libcxx/LICENSE.txt
index 926f0676..5ed8ec22 100644
--- a/system/lib/libcxx/LICENSE.txt
+++ b/system/lib/libcxx/LICENSE.txt
@@ -14,7 +14,7 @@ Full text of the relevant licenses is included below.
University of Illinois/NCSA
Open Source License
-Copyright (c) 2009-2010 by the contributors listed in CREDITS.TXT
+Copyright (c) 2009-2013 by the contributors listed in CREDITS.TXT
All rights reserved.
@@ -55,7 +55,7 @@ SOFTWARE.
==============================================================================
-Copyright (c) 2009-2010 by the contributors listed in CREDITS.TXT
+Copyright (c) 2009-2013 by the contributors listed in CREDITS.TXT
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/system/lib/libcxx/Makefile b/system/lib/libcxx/Makefile
deleted file mode 100644
index 814921ea..00000000
--- a/system/lib/libcxx/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-OBJECTS = \
- algorithm.bc \
- condition_variable.bc \
- future.bc \
- iostream.bc \
- memory.bc \
- random.bc \
- stdexcept.bc \
- system_error.bc \
- utility.bc \
- bind.bc \
- debug.bc \
- hash.bc \
- mutex.bc \
- string.bc \
- thread.bc \
- valarray.bc \
- chrono.bc \
- exception.bc \
- ios.bc \
- locale.bc \
- regex.bc \
- strstream.bc \
- typeinfo.bc
-
-all: libcxx.bc
-
-%.bc: %.cpp
- $(CXX) $< -o $@
-
-libcxx.bc: $(OBJECTS)
- $(CXX) $(OBJECTS) -o libcxx.bc
-
diff --git a/system/lib/libcxx/chrono.cpp b/system/lib/libcxx/chrono.cpp
index 416b9501..15a6f466 100644
--- a/system/lib/libcxx/chrono.cpp
+++ b/system/lib/libcxx/chrono.cpp
@@ -9,7 +9,7 @@
#include "chrono"
#include <sys/time.h> //for gettimeofday and timeval
-#if __APPLE__
+#ifdef __APPLE__
#include <mach/mach_time.h> // mach_absolute_time, mach_timebase_info_data_t
#else /* !__APPLE__ */
#include <cerrno> // errno
@@ -24,6 +24,8 @@ namespace chrono
// system_clock
+const bool system_clock::is_steady;
+
system_clock::time_point
system_clock::now() _NOEXCEPT
{
@@ -46,7 +48,9 @@ system_clock::from_time_t(time_t t) _NOEXCEPT
// steady_clock
-#if __APPLE__
+const bool steady_clock::is_steady;
+
+#ifdef __APPLE__
// mach_absolute_time() * MachInfo.numer / MachInfo.denom is the number of
// nanoseconds since the computer booted up. MachInfo.numer and MachInfo.denom
// are run time constants supplied by the OS. This clock has no relationship
@@ -61,7 +65,7 @@ static
steady_clock::rep
steady_simplified()
{
- return mach_absolute_time();
+ return static_cast<steady_clock::rep>(mach_absolute_time());
}
static
diff --git a/system/lib/libcxx/condition_variable.cpp b/system/lib/libcxx/condition_variable.cpp
index ca1dca32..de0f6f47 100644
--- a/system/lib/libcxx/condition_variable.cpp
+++ b/system/lib/libcxx/condition_variable.cpp
@@ -16,18 +16,17 @@ _LIBCPP_BEGIN_NAMESPACE_STD
condition_variable::~condition_variable()
{
- int e = pthread_cond_destroy(&__cv_);
-// assert(e == 0);
+ pthread_cond_destroy(&__cv_);
}
void
-condition_variable::notify_one()
+condition_variable::notify_one() _NOEXCEPT
{
pthread_cond_signal(&__cv_);
}
void
-condition_variable::notify_all()
+condition_variable::notify_all() _NOEXCEPT
{
pthread_cond_broadcast(&__cv_);
}
@@ -52,10 +51,22 @@ condition_variable::__do_timed_wait(unique_lock<mutex>& lk,
__throw_system_error(EPERM,
"condition_variable::timed wait: mutex not locked");
nanoseconds d = tp.time_since_epoch();
+ if (d > nanoseconds(0x59682F000000E941))
+ d = nanoseconds(0x59682F000000E941);
timespec ts;
seconds s = duration_cast<seconds>(d);
- ts.tv_sec = static_cast<decltype(ts.tv_sec)>(s.count());
- ts.tv_nsec = static_cast<decltype(ts.tv_nsec)>((d - s).count());
+ typedef decltype(ts.tv_sec) ts_sec;
+ _LIBCPP_CONSTEXPR ts_sec ts_sec_max = numeric_limits<ts_sec>::max();
+ if (s.count() < ts_sec_max)
+ {
+ ts.tv_sec = static_cast<ts_sec>(s.count());
+ ts.tv_nsec = static_cast<decltype(ts.tv_nsec)>((d - s).count());
+ }
+ else
+ {
+ ts.tv_sec = ts_sec_max;
+ ts.tv_nsec = giga::num - 1;
+ }
int ec = pthread_cond_timedwait(&__cv_, lk.mutex()->native_handle(), &ts);
if (ec != 0 && ec != ETIMEDOUT)
__throw_system_error(ec, "condition_variable timed_wait failed");
diff --git a/system/lib/libcxx/debug.cpp b/system/lib/libcxx/debug.cpp
index 2d2d6432..2d4b094b 100644
--- a/system/lib/libcxx/debug.cpp
+++ b/system/lib/libcxx/debug.cpp
@@ -17,15 +17,15 @@
_LIBCPP_BEGIN_NAMESPACE_STD
-_LIBCPP_VISIBLE
+_LIBCPP_FUNC_VIS
__libcpp_db*
__get_db()
{
static __libcpp_db db;
return &db;
-};
+}
-_LIBCPP_VISIBLE
+_LIBCPP_FUNC_VIS
const __libcpp_db*
__get_const_db()
{
@@ -120,20 +120,18 @@ __libcpp_db::__insert_ic(void* __i, const void* __c)
{
WLock _(mut());
__i_node* i = __insert_iterator(__i);
- _LIBCPP_ASSERT(__cbeg_ != __cend_, "Container constructed in a translation unit with debug mode disabled."
- " But it is being used in a translation unit with debug mode enabled."
- " Enable it in the other translation unit with #define _LIBCPP_DEBUG2 1");
- size_t hc = hash<const void*>()(__c) % (__cend_ - __cbeg_);
+ const char* errmsg =
+ "Container constructed in a translation unit with debug mode disabled."
+ " But it is being used in a translation unit with debug mode enabled."
+ " Enable it in the other translation unit with #define _LIBCPP_DEBUG2 1";
+ _LIBCPP_ASSERT(__cbeg_ != __cend_, errmsg);
+ size_t hc = hash<const void*>()(__c) % static_cast<size_t>(__cend_ - __cbeg_);
__c_node* c = __cbeg_[hc];
- _LIBCPP_ASSERT(c != nullptr, "Container constructed in a translation unit with debug mode disabled."
- " But it is being used in a translation unit with debug mode enabled."
- " Enable it in the other translation unit with #define _LIBCPP_DEBUG2 1");
+ _LIBCPP_ASSERT(c != nullptr, errmsg);
while (c->__c_ != __c)
{
c = c->__next_;
- _LIBCPP_ASSERT(c != nullptr, "Container constructed in a translation unit with debug mode disabled."
- " But it is being used in a translation unit with debug mode enabled."
- " Enable it in the other translation unit with #define _LIBCPP_DEBUG2 1");
+ _LIBCPP_ASSERT(c != nullptr, errmsg);
}
c->__add(i);
i->__c_ = c;
@@ -143,12 +141,16 @@ __c_node*
__libcpp_db::__insert_c(void* __c)
{
WLock _(mut());
- if (__csz_ + 1 > __cend_ - __cbeg_)
+ if (__csz_ + 1 > static_cast<size_t>(__cend_ - __cbeg_))
{
- size_t nc = __next_prime(2*(__cend_ - __cbeg_) + 1);
+ size_t nc = __next_prime(2*static_cast<size_t>(__cend_ - __cbeg_) + 1);
__c_node** cbeg = (__c_node**)calloc(nc, sizeof(void*));
if (cbeg == nullptr)
+#ifndef _LIBCPP_NO_EXCEPTIONS
throw bad_alloc();
+#else
+ abort();
+#endif
for (__c_node** p = __cbeg_; p != __cend_; ++p)
{
__c_node* q = *p;
@@ -165,11 +167,15 @@ __libcpp_db::__insert_c(void* __c)
__cbeg_ = cbeg;
__cend_ = __cbeg_ + nc;
}
- size_t hc = hash<void*>()(__c) % (__cend_ - __cbeg_);
+ size_t hc = hash<void*>()(__c) % static_cast<size_t>(__cend_ - __cbeg_);
__c_node* p = __cbeg_[hc];
__c_node* r = __cbeg_[hc] = (__c_node*)malloc(sizeof(__c_node));
if (__cbeg_[hc] == nullptr)
+#ifndef _LIBCPP_NO_EXCEPTIONS
throw bad_alloc();
+#else
+ abort();
+#endif
r->__c_ = __c;
r->__next_ = p;
++__csz_;
@@ -182,7 +188,7 @@ __libcpp_db::__erase_i(void* __i)
WLock _(mut());
if (__ibeg_ != __iend_)
{
- size_t hi = hash<void*>()(__i) % (__iend_ - __ibeg_);
+ size_t hi = hash<void*>()(__i) % static_cast<size_t>(__iend_ - __ibeg_);
__i_node* p = __ibeg_[hi];
if (p != nullptr)
{
@@ -211,7 +217,7 @@ void
__libcpp_db::__invalidate_all(void* __c)
{
WLock _(mut());
- size_t hc = hash<void*>()(__c) % (__cend_ - __cbeg_);
+ size_t hc = hash<void*>()(__c) % static_cast<size_t>(__cend_ - __cbeg_);
__c_node* p = __cbeg_[hc];
_LIBCPP_ASSERT(p != nullptr, "debug mode internal logic error __invalidate_all A");
while (p->__c_ != __c)
@@ -230,7 +236,7 @@ __c_node*
__libcpp_db::__find_c_and_lock(void* __c) const
{
mut().lock();
- size_t hc = hash<void*>()(__c) % (__cend_ - __cbeg_);
+ size_t hc = hash<void*>()(__c) % static_cast<size_t>(__cend_ - __cbeg_);
__c_node* p = __cbeg_[hc];
_LIBCPP_ASSERT(p != nullptr, "debug mode internal logic error __find_c_and_lock A");
while (p->__c_ != __c)
@@ -241,6 +247,20 @@ __libcpp_db::__find_c_and_lock(void* __c) const
return p;
}
+__c_node*
+__libcpp_db::__find_c(void* __c) const
+{
+ size_t hc = hash<void*>()(__c) % static_cast<size_t>(__cend_ - __cbeg_);
+ __c_node* p = __cbeg_[hc];
+ _LIBCPP_ASSERT(p != nullptr, "debug mode internal logic error __find_c A");
+ while (p->__c_ != __c)
+ {
+ p = p->__next_;
+ _LIBCPP_ASSERT(p != nullptr, "debug mode internal logic error __find_c B");
+ }
+ return p;
+}
+
void
__libcpp_db::unlock() const
{
@@ -251,7 +271,7 @@ void
__libcpp_db::__erase_c(void* __c)
{
WLock _(mut());
- size_t hc = hash<void*>()(__c) % (__cend_ - __cbeg_);
+ size_t hc = hash<void*>()(__c) % static_cast<size_t>(__cend_ - __cbeg_);
__c_node* p = __cbeg_[hc];
__c_node* q = nullptr;
_LIBCPP_ASSERT(p != nullptr, "debug mode internal logic error __erase_c A");
@@ -348,7 +368,7 @@ void
__libcpp_db::swap(void* c1, void* c2)
{
WLock _(mut());
- size_t hc = hash<void*>()(c1) % (__cend_ - __cbeg_);
+ size_t hc = hash<void*>()(c1) % static_cast<size_t>(__cend_ - __cbeg_);
__c_node* p1 = __cbeg_[hc];
_LIBCPP_ASSERT(p1 != nullptr, "debug mode internal logic error swap A");
while (p1->__c_ != c1)
@@ -356,7 +376,7 @@ __libcpp_db::swap(void* c1, void* c2)
p1 = p1->__next_;
_LIBCPP_ASSERT(p1 != nullptr, "debug mode internal logic error swap B");
}
- hc = hash<void*>()(c2) % (__cend_ - __cbeg_);
+ hc = hash<void*>()(c2) % static_cast<size_t>(__cend_ - __cbeg_);
__c_node* p2 = __cbeg_[hc];
_LIBCPP_ASSERT(p2 != nullptr, "debug mode internal logic error swap C");
while (p2->__c_ != c2)
@@ -380,18 +400,47 @@ __libcpp_db::__insert_i(void* __i)
__insert_iterator(__i);
}
+void
+__c_node::__add(__i_node* i)
+{
+ if (end_ == cap_)
+ {
+ size_t nc = 2*static_cast<size_t>(cap_ - beg_);
+ if (nc == 0)
+ nc = 1;
+ __i_node** beg = (__i_node**)malloc(nc * sizeof(__i_node*));
+ if (beg == nullptr)
+#ifndef _LIBCPP_NO_EXCEPTIONS
+ throw bad_alloc();
+#else
+ abort();
+#endif
+ if (nc > 1)
+ memcpy(beg, beg_, nc/2*sizeof(__i_node*));
+ free(beg_);
+ beg_ = beg;
+ end_ = beg_ + nc/2;
+ cap_ = beg_ + nc;
+ }
+ *end_++ = i;
+}
+
// private api
_LIBCPP_HIDDEN
__i_node*
__libcpp_db::__insert_iterator(void* __i)
{
- if (__isz_ + 1 > __iend_ - __ibeg_)
+ if (__isz_ + 1 > static_cast<size_t>(__iend_ - __ibeg_))
{
- size_t nc = __next_prime(2*(__iend_ - __ibeg_) + 1);
+ size_t nc = __next_prime(2*static_cast<size_t>(__iend_ - __ibeg_) + 1);
__i_node** ibeg = (__i_node**)calloc(nc, sizeof(void*));
if (ibeg == nullptr)
+#ifndef _LIBCPP_NO_EXCEPTIONS
throw bad_alloc();
+#else
+ abort();
+#endif
for (__i_node** p = __ibeg_; p != __iend_; ++p)
{
__i_node* q = *p;
@@ -408,11 +457,15 @@ __libcpp_db::__insert_iterator(void* __i)
__ibeg_ = ibeg;
__iend_ = __ibeg_ + nc;
}
- size_t hi = hash<void*>()(__i) % (__iend_ - __ibeg_);
+ size_t hi = hash<void*>()(__i) % static_cast<size_t>(__iend_ - __ibeg_);
__i_node* p = __ibeg_[hi];
__i_node* r = __ibeg_[hi] = (__i_node*)malloc(sizeof(__i_node));
if (r == nullptr)
+#ifndef _LIBCPP_NO_EXCEPTIONS
throw bad_alloc();
+#else
+ abort();
+#endif
::new(r) __i_node(__i, p, nullptr);
++__isz_;
return r;
@@ -425,7 +478,7 @@ __libcpp_db::__find_iterator(const void* __i) const
__i_node* r = nullptr;
if (__ibeg_ != __iend_)
{
- size_t h = hash<const void*>()(__i) % (__iend_ - __ibeg_);
+ size_t h = hash<const void*>()(__i) % static_cast<size_t>(__iend_ - __ibeg_);
for (__i_node* nd = __ibeg_[h]; nd != nullptr; nd = nd->__next_)
{
if (nd->__i_ == __i)
@@ -440,34 +493,12 @@ __libcpp_db::__find_iterator(const void* __i) const
_LIBCPP_HIDDEN
void
-__c_node::__add(__i_node* i)
-{
- if (end_ == cap_)
- {
- size_t nc = 2*(cap_ - beg_);
- if (nc == 0)
- nc = 1;
- __i_node** beg = (__i_node**)malloc(nc * sizeof(__i_node*));
- if (beg == nullptr)
- throw bad_alloc();
- if (nc > 1)
- memcpy(beg, beg_, nc/2*sizeof(__i_node*));
- free(beg_);
- beg_ = beg;
- end_ = beg_ + nc/2;
- cap_ = beg_ + nc;
- }
- *end_++ = i;
-}
-
-_LIBCPP_HIDDEN
-void
__c_node::__remove(__i_node* p)
{
__i_node** r = find(beg_, end_, p);
_LIBCPP_ASSERT(r != end_, "debug mode internal logic error __c_node::__remove");
if (--end_ != r)
- memmove(r, r+1, (end_ - r)*sizeof(__i_node*));
+ memmove(r, r+1, static_cast<size_t>(end_ - r)*sizeof(__i_node*));
}
_LIBCPP_END_NAMESPACE_STD
diff --git a/system/lib/libcxx/exception.cpp b/system/lib/libcxx/exception.cpp
index cba355e9..1d2f6b25 100644
--- a/system/lib/libcxx/exception.cpp
+++ b/system/lib/libcxx/exception.cpp
@@ -10,69 +10,83 @@
#include "exception"
-#if __APPLE__
+#ifndef __has_include
+#define __has_include(inc) 0
+#endif
+
+#ifdef __APPLE__
#include <cxxabi.h>
+
using namespace __cxxabiv1;
- using namespace __cxxabiapple;
- // On Darwin, there are two STL shared libraries and a lower level ABI
- // shared libray. The globals holding the current terminate handler and
- // current unexpected handler are in the ABI library.
- #define __terminate_handler __cxxabiapple::__cxa_terminate_handler
- #define __unexpected_handler __cxxabiapple::__cxa_unexpected_handler
#define HAVE_DEPENDENT_EH_ABI 1
-#elif defined(LIBCXXRT)
+ #ifndef _LIBCPPABI_VERSION
+ using namespace __cxxabiapple;
+ // On Darwin, there are two STL shared libraries and a lower level ABI
+ // shared libray. The globals holding the current terminate handler and
+ // current unexpected handler are in the ABI library.
+ #define __terminate_handler __cxxabiapple::__cxa_terminate_handler
+ #define __unexpected_handler __cxxabiapple::__cxa_unexpected_handler
+ #endif // _LIBCPPABI_VERSION
+#elif defined(LIBCXXRT) || __has_include(<cxxabi.h>)
#include <cxxabi.h>
using namespace __cxxabiv1;
- #define HAVE_DEPENDENT_EH_ABI 1
-#else // __APPLE__
+ #if defined(LIBCXXRT) || defined(_LIBCPPABI_VERSION)
+ #define HAVE_DEPENDENT_EH_ABI 1
+ #endif
+#elif !defined(__GLIBCXX__) // __has_include(<cxxabi.h>)
static std::terminate_handler __terminate_handler;
static std::unexpected_handler __unexpected_handler;
-#endif // __APPLE__
+#endif // __has_include(<cxxabi.h>)
+
+namespace std
+{
+
+#if !defined(LIBCXXRT) && !defined(_LIBCPPABI_VERSION) && !defined(__GLIBCXX__)
-#ifndef LIBCXXRT
// libcxxrt provides implementations of these functions itself.
-std::unexpected_handler
-std::set_unexpected(std::unexpected_handler func) _NOEXCEPT
+unexpected_handler
+set_unexpected(unexpected_handler func) _NOEXCEPT
{
return __sync_lock_test_and_set(&__unexpected_handler, func);
}
-std::unexpected_handler
-std::get_unexpected() _NOEXCEPT
+unexpected_handler
+get_unexpected() _NOEXCEPT
{
- return __sync_fetch_and_add(&__unexpected_handler, (std::unexpected_handler)0);
+ return __sync_fetch_and_add(&__unexpected_handler, (unexpected_handler)0);
}
-_ATTRIBUTE(noreturn)
+_LIBCPP_NORETURN
void
-std::unexpected()
+unexpected()
{
- (*std::get_unexpected())();
+ (*get_unexpected())();
// unexpected handler should not return
- std::terminate();
+ terminate();
}
-std::terminate_handler
-std::set_terminate(std::terminate_handler func) _NOEXCEPT
+terminate_handler
+set_terminate(terminate_handler func) _NOEXCEPT
{
return __sync_lock_test_and_set(&__terminate_handler, func);
}
-std::terminate_handler
-std::get_terminate() _NOEXCEPT
+terminate_handler
+get_terminate() _NOEXCEPT
{
- return __sync_fetch_and_add(&__terminate_handler, (std::terminate_handler)0);
+ return __sync_fetch_and_add(&__terminate_handler, (terminate_handler)0);
}
-_ATTRIBUTE(noreturn)
+#ifndef EMSCRIPTEN // We provide this in JS
+_LIBCPP_NORETURN
void
-std::terminate() _NOEXCEPT
+terminate() _NOEXCEPT
{
#ifndef _LIBCPP_NO_EXCEPTIONS
try
{
#endif // _LIBCPP_NO_EXCEPTIONS
- (*std::get_terminate())();
+ (*get_terminate())();
// handler should not return
::abort ();
#ifndef _LIBCPP_NO_EXCEPTIONS
@@ -84,38 +98,38 @@ std::terminate() _NOEXCEPT
}
#endif // _LIBCPP_NO_EXCEPTIONS
}
-#endif // LIBCXXRT
+#endif // !EMSCRIPTEN
+#endif // !defined(LIBCXXRT) && !defined(_LIBCPPABI_VERSION)
-#ifndef EMSCRIPTEN // This is implemented in Javascript for Emscripten
-bool std::uncaught_exception() _NOEXCEPT
+#if !defined(LIBCXXRT) && !defined(__GLIBCXX__) && !defined(EMSCRIPTEN)
+bool uncaught_exception() _NOEXCEPT
{
-#if __APPLE__
+#if defined(__APPLE__) || defined(_LIBCPPABI_VERSION)
// on Darwin, there is a helper function so __cxa_get_globals is private
- return __cxxabiapple::__cxa_uncaught_exception();
-#elif LIBCXXRT
- __cxa_eh_globals * globals = __cxa_get_globals();
- return (globals->uncaughtExceptions != 0);
+ return __cxa_uncaught_exception();
#else // __APPLE__
#warning uncaught_exception not yet implemented
::abort();
#endif // __APPLE__
}
-#endif // EMSCRIPTEN
-namespace std
-{
+#ifndef _LIBCPPABI_VERSION
exception::~exception() _NOEXCEPT
{
}
-bad_exception::~bad_exception() _NOEXCEPT
+const char* exception::what() const _NOEXCEPT
{
+ return "std::exception";
}
-const char* exception::what() const _NOEXCEPT
+#endif // _LIBCPPABI_VERSION
+#endif //LIBCXXRT
+#if !defined(_LIBCPPABI_VERSION) && !defined(__GLIBCXX__)
+
+bad_exception::~bad_exception() _NOEXCEPT
{
- return "std::exception";
}
const char* bad_exception::what() const _NOEXCEPT
@@ -123,6 +137,9 @@ const char* bad_exception::what() const _NOEXCEPT
return "std::bad_exception";
}
+#endif
+
+
exception_ptr::~exception_ptr() _NOEXCEPT
{
#if HAVE_DEPENDENT_EH_ABI
@@ -169,7 +186,7 @@ nested_exception::~nested_exception() _NOEXCEPT
{
}
-_ATTRIBUTE(noreturn)
+_LIBCPP_NORETURN
void
nested_exception::rethrow_nested() const
{
@@ -178,15 +195,14 @@ nested_exception::rethrow_nested() const
rethrow_exception(__ptr_);
}
-} // std
-std::exception_ptr std::current_exception() _NOEXCEPT
+exception_ptr current_exception() _NOEXCEPT
{
#if HAVE_DEPENDENT_EH_ABI
// be nicer if there was a constructor that took a ptr, then
// this whole function would be just:
// return exception_ptr(__cxa_current_primary_exception());
- std::exception_ptr ptr;
+ exception_ptr ptr;
ptr.__ptr_ = __cxa_current_primary_exception();
return ptr;
#else // __APPLE__
@@ -195,7 +211,8 @@ std::exception_ptr std::current_exception() _NOEXCEPT
#endif // __APPLE__
}
-void std::rethrow_exception(exception_ptr p)
+_LIBCPP_NORETURN
+void rethrow_exception(exception_ptr p)
{
#if HAVE_DEPENDENT_EH_ABI
__cxa_rethrow_primary_exception(p.__ptr_);
@@ -206,3 +223,4 @@ void std::rethrow_exception(exception_ptr p)
::abort();
#endif // __APPLE__
}
+} // std
diff --git a/system/lib/libcxx/future.cpp b/system/lib/libcxx/future.cpp
index ff591105..7d9a5b5d 100644
--- a/system/lib/libcxx/future.cpp
+++ b/system/lib/libcxx/future.cpp
@@ -29,7 +29,7 @@ __future_error_category::name() const _NOEXCEPT
string
__future_error_category::message(int ev) const
{
- switch (ev)
+ switch (static_cast<future_errc>(ev))
{
case future_errc::broken_promise:
return string("The associated promise has been destructed prior "
@@ -47,7 +47,7 @@ __future_error_category::message(int ev) const
}
const error_category&
-future_category()
+future_category() _NOEXCEPT
{
static __future_error_category __f;
return __f;
@@ -78,8 +78,8 @@ __assoc_sub_state::set_value()
throw future_error(make_error_code(future_errc::promise_already_satisfied));
#endif
__state_ |= __constructed | ready;
- __lk.unlock();
__cv_.notify_all();
+ __lk.unlock();
}
void
@@ -152,9 +152,9 @@ __assoc_sub_state::__sub_wait(unique_lock<mutex>& __lk)
{
if (!__is_ready())
{
- if (__state_ & deferred)
+ if (__state_ & static_cast<unsigned>(deferred))
{
- __state_ &= ~deferred;
+ __state_ &= ~static_cast<unsigned>(deferred);
__lk.unlock();
__execute();
}
diff --git a/system/lib/libcxx/hash.cpp b/system/lib/libcxx/hash.cpp
index 728b9bd3..a0135002 100644
--- a/system/lib/libcxx/hash.cpp
+++ b/system/lib/libcxx/hash.cpp
@@ -10,6 +10,9 @@
#include "__hash_table"
#include "algorithm"
#include "stdexcept"
+#include "type_traits"
+
+#pragma clang diagnostic ignored "-Wtautological-constant-out-of-range-compare"
_LIBCPP_BEGIN_NAMESPACE_STD
@@ -144,21 +147,23 @@ const unsigned indices[] =
// are fewer potential primes to search, and fewer potential primes to divide
// against.
+template <size_t _Sz = sizeof(size_t)>
inline _LIBCPP_INLINE_VISIBILITY
-void
-__check_for_overflow(size_t N, integral_constant<size_t, 32>)
+typename enable_if<_Sz == 4, void>::type
+__check_for_overflow(size_t N)
{
-#ifndef _LIBCPP_NO_EXCEPTIONS
+#ifndef _LIBCPP_NO_EXCEPTIONS
if (N > 0xFFFFFFFB)
throw overflow_error("__next_prime overflow");
#endif
}
+template <size_t _Sz = sizeof(size_t)>
inline _LIBCPP_INLINE_VISIBILITY
-void
-__check_for_overflow(size_t N, integral_constant<size_t, 64>)
+typename enable_if<_Sz == 8, void>::type
+__check_for_overflow(size_t N)
{
-#ifndef _LIBCPP_NO_EXCEPTIONS
+#ifndef _LIBCPP_NO_EXCEPTIONS
if (N > 0xFFFFFFFFFFFFFFC5ull)
throw overflow_error("__next_prime overflow");
#endif
@@ -174,14 +179,14 @@ __next_prime(size_t n)
return *std::lower_bound(small_primes, small_primes + N, n);
// Else n > largest small_primes
// Check for overflow
- __check_for_overflow(n, integral_constant<size_t,
- sizeof(n) * __CHAR_BIT__>());
+ __check_for_overflow(n);
// Start searching list of potential primes: L * k0 + indices[in]
const size_t M = sizeof(indices) / sizeof(indices[0]);
// Select first potential prime >= n
// Known a-priori n >= L
size_t k0 = n / L;
- size_t in = std::lower_bound(indices, indices + M, n - k0 * L) - indices;
+ size_t in = static_cast<size_t>(std::lower_bound(indices, indices + M, n - k0 * L)
+ - indices);
n = L * k0 + indices[in];
while (true)
{
diff --git a/system/lib/libcxx/ios.cpp b/system/lib/libcxx/ios.cpp
index 80917a04..732a61bb 100644
--- a/system/lib/libcxx/ios.cpp
+++ b/system/lib/libcxx/ios.cpp
@@ -401,7 +401,7 @@ ios_base::move(ios_base& rhs)
}
void
-ios_base::swap(ios_base& rhs)
+ios_base::swap(ios_base& rhs) _NOEXCEPT
{
_VSTD::swap(__fmtflags_, rhs.__fmtflags_);
_VSTD::swap(__precision_, rhs.__precision_);
diff --git a/system/lib/libcxx/iostream.cpp b/system/lib/libcxx/iostream.cpp
index 157c3977..7fc71df4 100644
--- a/system/lib/libcxx/iostream.cpp
+++ b/system/lib/libcxx/iostream.cpp
@@ -9,45 +9,60 @@
#include "__std_stream"
#include "string"
+#include "new"
_LIBCPP_BEGIN_NAMESPACE_STD
-static __stdinbuf<char> __cin(stdin);
-static __stdoutbuf<char> __cout(stdout);
-static __stdoutbuf<char> __cerr(stderr);
-static __stdinbuf<wchar_t> __wcin(stdin);
-static __stdoutbuf<wchar_t> __wcout(stdout);
-static __stdoutbuf<wchar_t> __wcerr(stderr);
-
-istream cin(&__cin);
-ostream cout(&__cout);
-ostream cerr(&__cerr);
-ostream clog(&__cerr);
-wistream wcin(&__wcin);
-wostream wcout(&__wcout);
-wostream wcerr(&__wcerr);
-wostream wclog(&__wcerr);
+static mbstate_t state_types[6] = {};
+
+_ALIGNAS_TYPE (__stdinbuf<char> ) static char __cin [sizeof(__stdinbuf <char>)];
+_ALIGNAS_TYPE (__stdoutbuf<char>) static char __cout[sizeof(__stdoutbuf<char>)];
+_ALIGNAS_TYPE (__stdoutbuf<char>) static char __cerr[sizeof(__stdoutbuf<char>)];
+_ALIGNAS_TYPE (__stdinbuf<wchar_t> ) static char __wcin [sizeof(__stdinbuf <wchar_t>)];
+_ALIGNAS_TYPE (__stdoutbuf<wchar_t>) static char __wcout[sizeof(__stdoutbuf<wchar_t>)];
+_ALIGNAS_TYPE (__stdoutbuf<wchar_t>) static char __wcerr[sizeof(__stdoutbuf<wchar_t>)];
+
+_ALIGNAS_TYPE (istream) char cin [sizeof(istream)];
+_ALIGNAS_TYPE (ostream) char cout[sizeof(ostream)];
+_ALIGNAS_TYPE (ostream) char cerr[sizeof(ostream)];
+_ALIGNAS_TYPE (ostream) char clog[sizeof(ostream)];
+_ALIGNAS_TYPE (wistream) char wcin [sizeof(wistream)];
+_ALIGNAS_TYPE (wostream) char wcout[sizeof(wostream)];
+_ALIGNAS_TYPE (wostream) char wcerr[sizeof(wostream)];
+_ALIGNAS_TYPE (wostream) char wclog[sizeof(wostream)];
ios_base::Init __start_std_streams;
ios_base::Init::Init()
{
- cin.tie(&cout);
- _VSTD::unitbuf(cerr);
- cerr.tie(&cout);
+ istream* cin_ptr = ::new(cin) istream(::new(__cin) __stdinbuf <char>(stdin, state_types+0) );
+ ostream* cout_ptr = ::new(cout) ostream(::new(__cout) __stdoutbuf<char>(stdout, state_types+1));
+ ostream* cerr_ptr = ::new(cerr) ostream(::new(__cerr) __stdoutbuf<char>(stderr, state_types+2));
+ ::new(clog) ostream(cerr_ptr->rdbuf());
+ cin_ptr->tie(cout_ptr);
+ _VSTD::unitbuf(*cerr_ptr);
+ cerr_ptr->tie(cout_ptr);
- wcin.tie(&wcout);
- _VSTD::unitbuf(wcerr);
- wcerr.tie(&wcout);
+ wistream* wcin_ptr = ::new(wcin) wistream(::new(__wcin) __stdinbuf <wchar_t>(stdin, state_types+3) );
+ wostream* wcout_ptr = ::new(wcout) wostream(::new(__wcout) __stdoutbuf<wchar_t>(stdout, state_types+4));
+ wostream* wcerr_ptr = ::new(wcerr) wostream(::new(__wcerr) __stdoutbuf<wchar_t>(stderr, state_types+5));
+ ::new(wclog) wostream(wcerr_ptr->rdbuf());
+ wcin_ptr->tie(wcout_ptr);
+ _VSTD::unitbuf(*wcerr_ptr);
+ wcerr_ptr->tie(wcout_ptr);
}
ios_base::Init::~Init()
{
- cout.flush();
- clog.flush();
+ ostream* cout_ptr = (ostream*)cout;
+ ostream* clog_ptr = (ostream*)clog;
+ cout_ptr->flush();
+ clog_ptr->flush();
- wcout.flush();
- wclog.flush();
+ wostream* wcout_ptr = (wostream*)wcout;
+ wostream* wclog_ptr = (wostream*)wclog;
+ wcout_ptr->flush();
+ wclog_ptr->flush();
}
_LIBCPP_END_NAMESPACE_STD
diff --git a/system/lib/libcxx/locale.cpp b/system/lib/libcxx/locale.cpp
index 87c47636..d9bc6f9a 100644
--- a/system/lib/libcxx/locale.cpp
+++ b/system/lib/libcxx/locale.cpp
@@ -7,6 +7,12 @@
//
//===----------------------------------------------------------------------===//
+// On Solaris, we need to define something to make the C99 parts of localeconv
+// visible.
+#ifdef __sun__
+#define _LCONV_C99
+#endif
+
#include "string"
#include "locale"
#include "codecvt"
@@ -19,39 +25,28 @@
#include "cstring"
#include "cwctype"
#include "__sso_allocator"
-#if _WIN32
-#include <locale.h>
+#ifdef _WIN32
+#include <support/win32/locale_win32.h>
#else // _WIN32
#include <langinfo.h>
#endif // _!WIN32
#include <stdlib.h>
-#ifdef _LIBCPP_STABLE_APPLE_ABI
-namespace {
- decltype(MB_CUR_MAX_L(_VSTD::declval<locale_t>()))
- inline _LIBCPP_INLINE_VISIBILITY
- mb_cur_max_l(locale_t loc)
- {
- return MB_CUR_MAX_L(loc);
- }
-}
-#endif
+// On Linux, wint_t and wchar_t have different signed-ness, and this causes
+// lots of noise in the build log, but no bugs that I know of.
+#pragma clang diagnostic ignored "-Wsign-conversion"
_LIBCPP_BEGIN_NAMESPACE_STD
-#ifndef _LIBCPP_STABLE_APPLE_ABI
+#ifdef __cloc_defined
locale_t __cloc() {
// In theory this could create a race condition. In practice
// the race condition is non-fatal since it will just create
// a little resource leak. Better approach would be appreciated.
-#ifdef __APPLE__
- return 0;
-#else
static locale_t result = newlocale(LC_ALL_MASK, "C", 0);
return result;
-#endif
}
-#endif // _LIBCPP_STABLE_APPLE_ABI
+#endif // __cloc_defined
namespace {
@@ -90,14 +85,44 @@ make(A0 a0, A1 a1, A2 a2)
return *(T*)&buf;
}
+template <typename T, size_t N>
+inline
+_LIBCPP_CONSTEXPR
+size_t
+countof(const T (&)[N])
+{
+ return N;
+}
+
+template <typename T>
+inline
+_LIBCPP_CONSTEXPR
+size_t
+countof(const T * const begin, const T * const end)
+{
+ return static_cast<size_t>(end - begin);
+}
+
}
+const locale::category locale::none;
+const locale::category locale::collate;
+const locale::category locale::ctype;
+const locale::category locale::monetary;
+const locale::category locale::numeric;
+const locale::category locale::time;
+const locale::category locale::messages;
+const locale::category locale::all;
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wpadded"
+
class _LIBCPP_HIDDEN locale::__imp
: public facet
{
enum {N = 28};
- string name_;
vector<facet*, __sso_allocator<facet*, N> > facets_;
+ string name_;
public:
explicit __imp(size_t refs = 0);
explicit __imp(const string& name, size_t refs = 0);
@@ -108,7 +133,8 @@ public:
~__imp();
const string& name() const {return name_;}
- bool has_facet(long id) const {return id < facets_.size() && facets_[id];}
+ bool has_facet(long id) const
+ {return static_cast<size_t>(id) < facets_.size() && facets_[static_cast<size_t>(id)];}
const locale::facet* use_facet(long id) const;
static const locale& make_classic();
@@ -119,46 +145,48 @@ private:
template <class F> void install_from(const __imp& other);
};
+#pragma clang diagnostic pop
+
locale::__imp::__imp(size_t refs)
: facet(refs),
- name_("C"),
- facets_(N)
+ facets_(N),
+ name_("C")
{
facets_.clear();
- install(&make<_VSTD::collate<char> >(1));
- install(&make<_VSTD::collate<wchar_t> >(1));
- install(&make<_VSTD::ctype<char> >((ctype_base::mask*)0, false, 1));
- install(&make<_VSTD::ctype<wchar_t> >(1));
- install(&make<codecvt<char, char, mbstate_t> >(1));
- install(&make<codecvt<wchar_t, char, mbstate_t> >(1));
- install(&make<codecvt<char16_t, char, mbstate_t> >(1));
- install(&make<codecvt<char32_t, char, mbstate_t> >(1));
- install(&make<numpunct<char> >(1));
- install(&make<numpunct<wchar_t> >(1));
- install(&make<num_get<char> >(1));
- install(&make<num_get<wchar_t> >(1));
- install(&make<num_put<char> >(1));
- install(&make<num_put<wchar_t> >(1));
- install(&make<moneypunct<char, false> >(1));
- install(&make<moneypunct<char, true> >(1));
- install(&make<moneypunct<wchar_t, false> >(1));
- install(&make<moneypunct<wchar_t, true> >(1));
- install(&make<money_get<char> >(1));
- install(&make<money_get<wchar_t> >(1));
- install(&make<money_put<char> >(1));
- install(&make<money_put<wchar_t> >(1));
- install(&make<time_get<char> >(1));
- install(&make<time_get<wchar_t> >(1));
- install(&make<time_put<char> >(1));
- install(&make<time_put<wchar_t> >(1));
- install(&make<_VSTD::messages<char> >(1));
- install(&make<_VSTD::messages<wchar_t> >(1));
+ install(&make<_VSTD::collate<char> >(1u));
+ install(&make<_VSTD::collate<wchar_t> >(1u));
+ install(&make<_VSTD::ctype<char> >((ctype_base::mask*)0, false, 1u));
+ install(&make<_VSTD::ctype<wchar_t> >(1u));
+ install(&make<codecvt<char, char, mbstate_t> >(1u));
+ install(&make<codecvt<wchar_t, char, mbstate_t> >(1u));
+ install(&make<codecvt<char16_t, char, mbstate_t> >(1u));
+ install(&make<codecvt<char32_t, char, mbstate_t> >(1u));
+ install(&make<numpunct<char> >(1u));
+ install(&make<numpunct<wchar_t> >(1u));
+ install(&make<num_get<char> >(1u));
+ install(&make<num_get<wchar_t> >(1u));
+ install(&make<num_put<char> >(1u));
+ install(&make<num_put<wchar_t> >(1u));
+ install(&make<moneypunct<char, false> >(1u));
+ install(&make<moneypunct<char, true> >(1u));
+ install(&make<moneypunct<wchar_t, false> >(1u));
+ install(&make<moneypunct<wchar_t, true> >(1u));
+ install(&make<money_get<char> >(1u));
+ install(&make<money_get<wchar_t> >(1u));
+ install(&make<money_put<char> >(1u));
+ install(&make<money_put<wchar_t> >(1u));
+ install(&make<time_get<char> >(1u));
+ install(&make<time_get<wchar_t> >(1u));
+ install(&make<time_put<char> >(1u));
+ install(&make<time_put<wchar_t> >(1u));
+ install(&make<_VSTD::messages<char> >(1u));
+ install(&make<_VSTD::messages<wchar_t> >(1u));
}
locale::__imp::__imp(const string& name, size_t refs)
: facet(refs),
- name_(name),
- facets_(N)
+ facets_(N),
+ name_(name)
{
#ifndef _LIBCPP_NO_EXCEPTIONS
try
@@ -200,9 +228,14 @@ locale::__imp::__imp(const string& name, size_t refs)
#endif // _LIBCPP_NO_EXCEPTIONS
}
+// NOTE avoid the `base class should be explicitly initialized in the
+// copy constructor` warning emitted by GCC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wextra"
+
locale::__imp::__imp(const __imp& other)
- : name_(other.name_),
- facets_(max<size_t>(N, other.facets_.size()))
+ : facets_(max<size_t>(N, other.facets_.size())),
+ name_(other.name_)
{
facets_ = other.facets_;
for (unsigned i = 0; i < facets_.size(); ++i)
@@ -210,9 +243,11 @@ locale::__imp::__imp(const __imp& other)
facets_[i]->__add_shared();
}
+#pragma GCC diagnostic pop
+
locale::__imp::__imp(const __imp& other, const string& name, locale::category c)
- : name_("*"),
- facets_(N)
+ : facets_(N),
+ name_("*")
{
facets_ = other.facets_;
for (unsigned i = 0; i < facets_.size(); ++i)
@@ -282,8 +317,8 @@ locale::__imp::install_from(const locale::__imp& one)
}
locale::__imp::__imp(const __imp& other, const __imp& one, locale::category c)
- : name_("*"),
- facets_(N)
+ : facets_(N),
+ name_("*")
{
facets_ = other.facets_;
for (unsigned i = 0; i < facets_.size(); ++i)
@@ -352,8 +387,8 @@ locale::__imp::__imp(const __imp& other, const __imp& one, locale::category c)
}
locale::__imp::__imp(const __imp& other, facet* f, long id)
- : name_("*"),
- facets_(max<size_t>(N, other.facets_.size()+1))
+ : facets_(max<size_t>(N, other.facets_.size()+1)),
+ name_("*")
{
f->__add_shared();
unique_ptr<facet, release> hold(f);
@@ -376,11 +411,11 @@ locale::__imp::install(facet* f, long id)
{
f->__add_shared();
unique_ptr<facet, release> hold(f);
- if (id >= facets_.size())
- facets_.resize(id+1);
- if (facets_[id])
- facets_[id]->__release_shared();
- facets_[id] = hold.release();
+ if (static_cast<size_t>(id) >= facets_.size())
+ facets_.resize(static_cast<size_t>(id+1));
+ if (facets_[static_cast<size_t>(id)])
+ facets_[static_cast<size_t>(id)]->__release_shared();
+ facets_[static_cast<size_t>(id)] = hold.release();
}
const locale::facet*
@@ -390,7 +425,7 @@ locale::__imp::use_facet(long id) const
if (!has_facet(id))
throw bad_cast();
#endif // _LIBCPP_NO_EXCEPTIONS
- return facets_[id];
+ return facets_[static_cast<size_t>(id)];
}
// locale
@@ -401,7 +436,7 @@ locale::__imp::make_classic()
// only one thread can get in here and it only gets in once
static aligned_storage<sizeof(locale)>::type buf;
locale* c = (locale*)&buf;
- c->__locale_ = &make<__imp>(1);
+ c->__locale_ = &make<__imp>(1u);
return *c;
}
@@ -417,7 +452,6 @@ locale::__imp::make_global()
{
// only one thread can get in here and it only gets in once
static aligned_storage<sizeof(locale)>::type buf;
- locale* g = (locale*)&buf;
::new (&buf) locale(locale::classic());
return *(locale*)&buf;
}
@@ -695,6 +729,19 @@ collate_byname<wchar_t>::do_transform(const char_type* lo, const char_type* hi)
// template <> class ctype<wchar_t>;
+const ctype_base::mask ctype_base::space;
+const ctype_base::mask ctype_base::print;
+const ctype_base::mask ctype_base::cntrl;
+const ctype_base::mask ctype_base::upper;
+const ctype_base::mask ctype_base::lower;
+const ctype_base::mask ctype_base::alpha;
+const ctype_base::mask ctype_base::digit;
+const ctype_base::mask ctype_base::punct;
+const ctype_base::mask ctype_base::xdigit;
+const ctype_base::mask ctype_base::blank;
+const ctype_base::mask ctype_base::alnum;
+const ctype_base::mask ctype_base::graph;
+
locale::id ctype<wchar_t>::id;
ctype<wchar_t>::~ctype()
@@ -737,10 +784,12 @@ ctype<wchar_t>::do_scan_not(mask m, const char_type* low, const char_type* high)
wchar_t
ctype<wchar_t>::do_toupper(char_type c) const
{
-#if !(defined(_LIBCPP_STABLE_APPLE_ABI) || defined(__FreeBSD__))
+#ifdef _LIBCPP_HAS_DEFAULTRUNELOCALE
+ return isascii(c) ? _DefaultRuneLocale.__mapupper[c] : c;
+#elif defined(__GLIBC__) || defined(EMSCRIPTEN)
return isascii(c) ? ctype<char>::__classic_upper_table()[c] : c;
#else
- return isascii(c) ? _DefaultRuneLocale.__mapupper[c] : c;
+ return (isascii(c) && iswlower_l(c, __cloc())) ? c-L'a'+L'A' : c;
#endif
}
@@ -748,11 +797,13 @@ const wchar_t*
ctype<wchar_t>::do_toupper(char_type* low, const char_type* high) const
{
for (; low != high; ++low)
-#if !(defined(_LIBCPP_STABLE_APPLE_ABI) || defined(__FreeBSD__))
+#ifdef _LIBCPP_HAS_DEFAULTRUNELOCALE
+ *low = isascii(*low) ? _DefaultRuneLocale.__mapupper[*low] : *low;
+#elif defined(__GLIBC__) || defined(EMSCRIPTEN)
*low = isascii(*low) ? ctype<char>::__classic_upper_table()[*low]
: *low;
#else
- *low = isascii(*low) ? _DefaultRuneLocale.__mapupper[*low] : *low;
+ *low = (isascii(*low) && islower_l(*low, __cloc())) ? (*low-L'a'+L'A') : *low;
#endif
return low;
}
@@ -760,10 +811,12 @@ ctype<wchar_t>::do_toupper(char_type* low, const char_type* high) const
wchar_t
ctype<wchar_t>::do_tolower(char_type c) const
{
-#ifndef _LIBCPP_STABLE_APPLE_ABI
+#ifdef _LIBCPP_HAS_DEFAULTRUNELOCALE
+ return isascii(c) ? _DefaultRuneLocale.__maplower[c] : c;
+#elif defined(__GLIBC__) || defined(EMSCRIPTEN)
return isascii(c) ? ctype<char>::__classic_lower_table()[c] : c;
#else
- return isascii(c) ? _DefaultRuneLocale.__maplower[c] : c;
+ return (isascii(c) && isupper_l(c, __cloc())) ? c-L'A'+'a' : c;
#endif
}
@@ -771,11 +824,13 @@ const wchar_t*
ctype<wchar_t>::do_tolower(char_type* low, const char_type* high) const
{
for (; low != high; ++low)
-#ifndef _LIBCPP_STABLE_APPLE_ABI
+#ifdef _LIBCPP_HAS_DEFAULTRUNELOCALE
+ *low = isascii(*low) ? _DefaultRuneLocale.__maplower[*low] : *low;
+#elif defined(__GLIBC__) || defined(EMSCRIPTEN)
*low = isascii(*low) ? ctype<char>::__classic_lower_table()[*low]
: *low;
#else
- *low = isascii(*low) ? _DefaultRuneLocale.__maplower[*low] : *low;
+ *low = (isascii(*low) && isupper_l(*low, __cloc())) ? *low-L'A'+L'a' : *low;
#endif
return low;
}
@@ -807,7 +862,7 @@ ctype<wchar_t>::do_narrow(const char_type* low, const char_type* high, char dfau
{
for (; low != high; ++low, ++dest)
if (isascii(*low))
- *dest = *low;
+ *dest = static_cast<char>(*low);
else
*dest = dfault;
return low;
@@ -835,10 +890,14 @@ ctype<char>::~ctype()
char
ctype<char>::do_toupper(char_type c) const
{
-#ifndef _LIBCPP_STABLE_APPLE_ABI
- return isascii(c) ? __classic_upper_table()[c] : c;
+#ifdef _LIBCPP_HAS_DEFAULTRUNELOCALE
+ return isascii(c) ?
+ static_cast<char>(_DefaultRuneLocale.__mapupper[static_cast<ptrdiff_t>(c)]) : c;
+#elif defined(__GLIBC__) || defined(EMSCRIPTEN)
+ return isascii(c) ?
+ static_cast<char>(__classic_upper_table()[static_cast<size_t>(c)]) : c;
#else
- return isascii(c) ? _DefaultRuneLocale.__mapupper[c] : c;
+ return (isascii(c) && islower_l(c, __cloc())) ? c-'a'+'A' : c;
#endif
}
@@ -846,10 +905,14 @@ const char*
ctype<char>::do_toupper(char_type* low, const char_type* high) const
{
for (; low != high; ++low)
-#ifndef _LIBCPP_STABLE_APPLE_ABI
- *low = isascii(*low) ? __classic_upper_table()[*low] : *low;
+#ifdef _LIBCPP_HAS_DEFAULTRUNELOCALE
+ *low = isascii(*low) ?
+ static_cast<char>(_DefaultRuneLocale.__mapupper[static_cast<ptrdiff_t>(*low)]) : *low;
+#elif defined(__GLIBC__) || defined(EMSCRIPTEN)
+ *low = isascii(*low) ?
+ static_cast<char>(__classic_upper_table()[static_cast<size_t>(*low)]) : *low;
#else
- *low = isascii(*low) ? _DefaultRuneLocale.__mapupper[*low] : *low;
+ *low = (isascii(*low) && islower_l(*low, __cloc())) ? *low-'a'+'A' : *low;
#endif
return low;
}
@@ -857,10 +920,14 @@ ctype<char>::do_toupper(char_type* low, const char_type* high) const
char
ctype<char>::do_tolower(char_type c) const
{
-#ifndef _LIBCPP_STABLE_APPLE_ABI
- return isascii(c) ? __classic_lower_table()[c] : c;
+#ifdef _LIBCPP_HAS_DEFAULTRUNELOCALE
+ return isascii(c) ?
+ static_cast<char>(_DefaultRuneLocale.__maplower[static_cast<ptrdiff_t>(c)]) : c;
+#elif defined(__GLIBC__) || defined(EMSCRIPTEN)
+ return isascii(c) ?
+ static_cast<char>(__classic_lower_table()[static_cast<size_t>(c)]) : c;
#else
- return isascii(c) ? _DefaultRuneLocale.__maplower[c] : c;
+ return (isascii(c) && isupper_l(c, __cloc())) ? c-'A'+'a' : c;
#endif
}
@@ -868,10 +935,12 @@ const char*
ctype<char>::do_tolower(char_type* low, const char_type* high) const
{
for (; low != high; ++low)
-#ifndef _LIBCPP_STABLE_APPLE_ABI
- *low = isascii(*low) ? __classic_lower_table()[*low] : *low;
+#ifdef _LIBCPP_HAS_DEFAULTRUNELOCALE
+ *low = isascii(*low) ? static_cast<char>(_DefaultRuneLocale.__maplower[static_cast<ptrdiff_t>(*low)]) : *low;
+#elif defined(__GLIBC__) || defined(EMSCRIPTEN)
+ *low = isascii(*low) ? static_cast<char>(__classic_lower_table()[static_cast<size_t>(*low)]) : *low;
#else
- *low = isascii(*low) ? _DefaultRuneLocale.__maplower[*low] : *low;
+ *low = (isascii(*low) && isupper_l(*low, __cloc())) ? *low-'A'+'a' : *low;
#endif
return low;
}
@@ -909,10 +978,11 @@ ctype<char>::do_narrow(const char_type* low, const char_type* high, char dfault,
return low;
}
-// XXX Emscripten define local table
+#ifdef EMSCRIPTEN
extern "C" const unsigned short ** __ctype_b_loc();
extern "C" const int ** __ctype_tolower_loc();
extern "C" const int ** __ctype_toupper_loc();
+#endif
const ctype<char>::mask*
ctype<char>::classic_table() _NOEXCEPT
@@ -921,44 +991,50 @@ ctype<char>::classic_table() _NOEXCEPT
return _DefaultRuneLocale.__runetype;
#elif defined(__GLIBC__)
return __cloc()->__ctype_b;
+#elif __sun__
+ return __ctype_mask;
+#elif defined(_WIN32)
+ return _ctype+1; // internal ctype mask table defined in msvcrt.dll
// This is assumed to be safe, which is a nonsense assumption because we're
// going to end up dereferencing it later...
#elif defined(EMSCRIPTEN)
return *__ctype_b_loc();
#else
+ // Platform not supported: abort so the person doing the port knows what to
+ // fix
+# warning ctype<char>::classic_table() is not implemented
+ abort();
return NULL;
#endif
}
-#ifndef _LIBCPP_STABLE_APPLE_ABI
+#if defined(__GLIBC__)
const int*
ctype<char>::__classic_lower_table() _NOEXCEPT
{
-#if defined(__APPLE__) || defined(__FreeBSD__)
- return _DefaultRuneLocale.__maplower;
-#elif defined(__GLIBC__)
return __cloc()->__ctype_tolower;
-#elif defined(EMSCRIPTEN)
- return *__ctype_tolower_loc();
-#else
- return NULL;
-#endif
}
const int*
ctype<char>::__classic_upper_table() _NOEXCEPT
{
-#if defined(__APPLE__) || defined(__FreeBSD__)
- return _DefaultRuneLocale.__mapupper;
-#elif defined(__GLIBC__)
return __cloc()->__ctype_toupper;
-#elif defined(EMSCRIPTEN)
+}
+#endif // __GLIBC__
+
+#if defined(EMSCRIPTEN)
+const int*
+ctype<char>::__classic_lower_table() _NOEXCEPT
+{
+ return *__ctype_tolower_loc();
+}
+
+const int*
+ctype<char>::__classic_upper_table() _NOEXCEPT
+{
return *__ctype_toupper_loc();
-#else
- return NULL;
-#endif
}
-#endif // _LIBCPP_STABLE_APPLE_ABI
+#endif // EMSCRIPTEN
// template <> class ctype_byname<char>
@@ -992,28 +1068,28 @@ ctype_byname<char>::~ctype_byname()
char
ctype_byname<char>::do_toupper(char_type c) const
{
- return toupper_l(c, __l);
+ return static_cast<char>(toupper_l(c, __l));
}
const char*
ctype_byname<char>::do_toupper(char_type* low, const char_type* high) const
{
for (; low != high; ++low)
- *low = toupper_l(*low, __l);
+ *low = static_cast<char>(toupper_l(*low, __l));
return low;
}
char
ctype_byname<char>::do_tolower(char_type c) const
{
- return tolower_l(c, __l);
+ return static_cast<char>(tolower_l(c, __l));
}
const char*
ctype_byname<char>::do_tolower(char_type* low, const char_type* high) const
{
for (; low != high; ++low)
- *low = tolower_l(*low, __l);
+ *low = static_cast<char>(tolower_l(*low, __l));
return low;
}
@@ -1052,18 +1128,19 @@ ctype_byname<wchar_t>::do_is(mask m, char_type c) const
#ifdef _LIBCPP_WCTYPE_IS_MASK
return static_cast<bool>(iswctype_l(c, m, __l));
#else
- // FIXME: This is broken for things that test more than one flag.
- if (m & space && !iswspace_l(c, __l)) return false;
- if (m & print && !iswprint_l(c, __l)) return false;
- if (m & cntrl && !iswcntrl_l(c, __l)) return false;
- if (m & upper && !iswupper_l(c, __l)) return false;
- if (m & lower && !iswlower_l(c, __l)) return false;
- if (m & alpha && !iswalpha_l(c, __l)) return false;
- if (m & digit && !iswdigit_l(c, __l)) return false;
- if (m & punct && !iswpunct_l(c, __l)) return false;
- if (m & xdigit && !iswxdigit_l(c, __l)) return false;
- if (m & blank && !iswblank_l(c, __l)) return false;
- return true;
+ bool result = false;
+ wint_t ch = static_cast<wint_t>(c);
+ if (m & space) result |= (iswspace_l(ch, __l) != 0);
+ if (m & print) result |= (iswprint_l(ch, __l) != 0);
+ if (m & cntrl) result |= (iswcntrl_l(ch, __l) != 0);
+ if (m & upper) result |= (iswupper_l(ch, __l) != 0);
+ if (m & lower) result |= (iswlower_l(ch, __l) != 0);
+ if (m & alpha) result |= (iswalpha_l(ch, __l) != 0);
+ if (m & digit) result |= (iswdigit_l(ch, __l) != 0);
+ if (m & punct) result |= (iswpunct_l(ch, __l) != 0);
+ if (m & xdigit) result |= (iswxdigit_l(ch, __l) != 0);
+ if (m & blank) result |= (iswblank_l(ch, __l) != 0);
+ return result;
#endif
}
@@ -1077,23 +1154,24 @@ ctype_byname<wchar_t>::do_is(const char_type* low, const char_type* high, mask*
else
{
*vec = 0;
- if (iswspace_l(*low, __l))
+ wint_t ch = static_cast<wint_t>(*low);
+ if (iswspace_l(ch, __l))
*vec |= space;
- if (iswprint_l(*low, __l))
+ if (iswprint_l(ch, __l))
*vec |= print;
- if (iswcntrl_l(*low, __l))
+ if (iswcntrl_l(ch, __l))
*vec |= cntrl;
- if (iswupper_l(*low, __l))
+ if (iswupper_l(ch, __l))
*vec |= upper;
- if (iswlower_l(*low, __l))
+ if (iswlower_l(ch, __l))
*vec |= lower;
- if (iswalpha_l(*low, __l))
+ if (iswalpha_l(ch, __l))
*vec |= alpha;
- if (iswdigit_l(*low, __l))
+ if (iswdigit_l(ch, __l))
*vec |= digit;
- if (iswpunct_l(*low, __l))
+ if (iswpunct_l(ch, __l))
*vec |= punct;
- if (iswxdigit_l(*low, __l))
+ if (iswxdigit_l(ch, __l))
*vec |= xdigit;
}
}
@@ -1109,17 +1187,17 @@ ctype_byname<wchar_t>::do_scan_is(mask m, const char_type* low, const char_type*
if (iswctype_l(*low, m, __l))
break;
#else
- if (m & space && !iswspace_l(*low, __l)) continue;
- if (m & print && !iswprint_l(*low, __l)) continue;
- if (m & cntrl && !iswcntrl_l(*low, __l)) continue;
- if (m & upper && !iswupper_l(*low, __l)) continue;
- if (m & lower && !iswlower_l(*low, __l)) continue;
- if (m & alpha && !iswalpha_l(*low, __l)) continue;
- if (m & digit && !iswdigit_l(*low, __l)) continue;
- if (m & punct && !iswpunct_l(*low, __l)) continue;
- if (m & xdigit && !iswxdigit_l(*low, __l)) continue;
- if (m & blank && !iswblank_l(*low, __l)) continue;
- break;
+ wint_t ch = static_cast<wint_t>(*low);
+ if (m & space && iswspace_l(ch, __l)) break;
+ if (m & print && iswprint_l(ch, __l)) break;
+ if (m & cntrl && iswcntrl_l(ch, __l)) break;
+ if (m & upper && iswupper_l(ch, __l)) break;
+ if (m & lower && iswlower_l(ch, __l)) break;
+ if (m & alpha && iswalpha_l(ch, __l)) break;
+ if (m & digit && iswdigit_l(ch, __l)) break;
+ if (m & punct && iswpunct_l(ch, __l)) break;
+ if (m & xdigit && iswxdigit_l(ch, __l)) break;
+ if (m & blank && iswblank_l(ch, __l)) break;
#endif
}
return low;
@@ -1134,16 +1212,17 @@ ctype_byname<wchar_t>::do_scan_not(mask m, const char_type* low, const char_type
if (!iswctype_l(*low, m, __l))
break;
#else
- if (m & space && iswspace_l(*low, __l)) continue;
- if (m & print && iswprint_l(*low, __l)) continue;
- if (m & cntrl && iswcntrl_l(*low, __l)) continue;
- if (m & upper && iswupper_l(*low, __l)) continue;
- if (m & lower && iswlower_l(*low, __l)) continue;
- if (m & alpha && iswalpha_l(*low, __l)) continue;
- if (m & digit && iswdigit_l(*low, __l)) continue;
- if (m & punct && iswpunct_l(*low, __l)) continue;
- if (m & xdigit && iswxdigit_l(*low, __l)) continue;
- if (m & blank && iswblank_l(*low, __l)) continue;
+ wint_t ch = static_cast<wint_t>(*low);
+ if (m & space && iswspace_l(ch, __l)) continue;
+ if (m & print && iswprint_l(ch, __l)) continue;
+ if (m & cntrl && iswcntrl_l(ch, __l)) continue;
+ if (m & upper && iswupper_l(ch, __l)) continue;
+ if (m & lower && iswlower_l(ch, __l)) continue;
+ if (m & alpha && iswalpha_l(ch, __l)) continue;
+ if (m & digit && iswdigit_l(ch, __l)) continue;
+ if (m & punct && iswpunct_l(ch, __l)) continue;
+ if (m & xdigit && iswxdigit_l(ch, __l)) continue;
+ if (m & blank && iswblank_l(ch, __l)) continue;
break;
#endif
}
@@ -1181,7 +1260,7 @@ ctype_byname<wchar_t>::do_tolower(char_type* low, const char_type* high) const
wchar_t
ctype_byname<wchar_t>::do_widen(char c) const
{
-#ifdef _LIBCPP_STABLE_APPLE_ABI
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
return btowc_l(c, __l);
#else
return __btowc_l(c, __l);
@@ -1192,7 +1271,7 @@ const char*
ctype_byname<wchar_t>::do_widen(const char* low, const char* high, char_type* dest) const
{
for (; low != high; ++low, ++dest)
-#ifdef _LIBCPP_STABLE_APPLE_ABI
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
*dest = btowc_l(*low, __l);
#else
*dest = __btowc_l(*low, __l);
@@ -1203,12 +1282,12 @@ ctype_byname<wchar_t>::do_widen(const char* low, const char* high, char_type* de
char
ctype_byname<wchar_t>::do_narrow(char_type c, char dfault) const
{
-#ifdef _LIBCPP_STABLE_APPLE_ABI
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
int r = wctob_l(c, __l);
#else
int r = __wctob_l(c, __l);
#endif
- return r != WEOF ? static_cast<char>(r) : dfault;
+ return r != static_cast<int>(WEOF) ? static_cast<char>(r) : dfault;
}
const wchar_t*
@@ -1216,12 +1295,12 @@ ctype_byname<wchar_t>::do_narrow(const char_type* low, const char_type* high, ch
{
for (; low != high; ++low, ++dest)
{
-#ifdef _LIBCPP_STABLE_APPLE_ABI
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
int r = wctob_l(*low, __l);
#else
int r = __wctob_l(*low, __l);
#endif
- *dest = r != WEOF ? static_cast<char>(r) : dfault;
+ *dest = r != static_cast<int>(WEOF) ? static_cast<char>(r) : dfault;
}
return low;
}
@@ -1278,7 +1357,7 @@ int
codecvt<char, char, mbstate_t>::do_length(state_type&,
const extern_type* frm, const extern_type* end, size_t mx) const
{
- return static_cast<int>(min<size_t>(mx, end-frm));
+ return static_cast<int>(min<size_t>(mx, static_cast<size_t>(end-frm)));
}
int
@@ -1330,8 +1409,9 @@ codecvt<wchar_t, char, mbstate_t>::do_out(state_type& st,
{
// save state in case needed to reover to_nxt on error
mbstate_t save_state = st;
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- size_t n = wcsnrtombs_l(to, &frm_nxt, fend-frm, to_end-to, &st, __l);
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ size_t n = wcsnrtombs_l(to, &frm_nxt, static_cast<size_t>(fend-frm),
+ static_cast<size_t>(to_end-to), &st, __l);
#else
size_t n = __wcsnrtombs_l(to, &frm_nxt, fend-frm, to_end-to, &st, __l);
#endif
@@ -1340,7 +1420,7 @@ codecvt<wchar_t, char, mbstate_t>::do_out(state_type& st,
// need to recover to_nxt
for (to_nxt = to; frm != frm_nxt; ++frm)
{
-#ifdef _LIBCPP_STABLE_APPLE_ABI
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
n = wcrtomb_l(to_nxt, *frm, &save_state, __l);
#else
n = __wcrtomb_l(to_nxt, *frm, &save_state, __l);
@@ -1361,14 +1441,14 @@ codecvt<wchar_t, char, mbstate_t>::do_out(state_type& st,
{
// Try to write the terminating null
extern_type tmp[MB_LEN_MAX];
-#ifdef _LIBCPP_STABLE_APPLE_ABI
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
n = wcrtomb_l(tmp, intern_type(), &st, __l);
#else
n = __wcrtomb_l(tmp, intern_type(), &st, __l);
#endif
if (n == size_t(-1)) // on error
return error;
- if (n > to_end-to_nxt) // is there room?
+ if (n > static_cast<size_t>(to_end-to_nxt)) // is there room?
return partial;
for (extern_type* p = tmp; n; --n) // write it
*to_nxt++ = *p++;
@@ -1398,8 +1478,9 @@ codecvt<wchar_t, char, mbstate_t>::do_in(state_type& st,
{
// save state in case needed to reover to_nxt on error
mbstate_t save_state = st;
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- size_t n = mbsnrtowcs_l(to, &frm_nxt, fend-frm, to_end-to, &st, __l);
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ size_t n = mbsnrtowcs_l(to, &frm_nxt, static_cast<size_t>(fend-frm),
+ static_cast<size_t>(to_end-to), &st, __l);
#else
size_t n = __mbsnrtowcs_l(to, &frm_nxt, fend-frm, to_end-to, &st, __l);
#endif
@@ -1408,8 +1489,9 @@ codecvt<wchar_t, char, mbstate_t>::do_in(state_type& st,
// need to recover to_nxt
for (to_nxt = to; frm != frm_nxt; ++to_nxt)
{
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- n = mbrtowc_l(to_nxt, frm, fend-frm, &save_state, __l);
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ n = mbrtowc_l(to_nxt, frm, static_cast<size_t>(fend-frm),
+ &save_state, __l);
#else
n = __mbrtowc_l(to_nxt, frm, fend-frm, &save_state, __l);
#endif
@@ -1418,10 +1500,10 @@ codecvt<wchar_t, char, mbstate_t>::do_in(state_type& st,
case 0:
++frm;
break;
- case static_cast<size_t>(-1): // XXX EMSCRIPTEN
+ case size_t(-1):
frm_nxt = frm;
return error;
- case static_cast<size_t>(-2): // XXX EMSCRIPTEN
+ case size_t(-2):
frm_nxt = frm;
return partial;
default:
@@ -1440,7 +1522,7 @@ codecvt<wchar_t, char, mbstate_t>::do_in(state_type& st,
if (fend != frm_end) // set up next null terminated sequence
{
// Try to write the terminating null
-#ifdef _LIBCPP_STABLE_APPLE_ABI
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
n = mbrtowc_l(to_nxt, frm_nxt, 1, &st, __l);
#else
n = __mbrtowc_l(to_nxt, frm_nxt, 1, &st, __l);
@@ -1464,7 +1546,7 @@ codecvt<wchar_t, char, mbstate_t>::do_unshift(state_type& st,
{
to_nxt = to;
extern_type tmp[MB_LEN_MAX];
-#ifdef _LIBCPP_STABLE_APPLE_ABI
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
size_t n = wcrtomb_l(tmp, intern_type(), &st, __l);
#else
size_t n = __wcrtomb_l(tmp, intern_type(), &st, __l);
@@ -1472,7 +1554,7 @@ codecvt<wchar_t, char, mbstate_t>::do_unshift(state_type& st,
if (n == size_t(-1) || n == 0) // on error
return error;
--n;
- if (n > to_end-to_nxt) // is there room?
+ if (n > static_cast<size_t>(to_end-to_nxt)) // is there room?
return partial;
for (extern_type* p = tmp; n; --n) // write it
*to_nxt++ = *p++;
@@ -1482,14 +1564,14 @@ codecvt<wchar_t, char, mbstate_t>::do_unshift(state_type& st,
int
codecvt<wchar_t, char, mbstate_t>::do_encoding() const _NOEXCEPT
{
-#ifdef _LIBCPP_STABLE_APPLE_ABI
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
if (mbtowc_l((wchar_t*) 0, (const char*) 0, MB_LEN_MAX, __l) == 0)
#else
if (__mbtowc_l((wchar_t*) 0, (const char*) 0, MB_LEN_MAX, __l) == 0)
#endif
{
// stateless encoding
-#ifdef _LIBCPP_STABLE_APPLE_ABI
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
if (__l == 0 || MB_CUR_MAX_L(__l) == 1) // there are no known constant length encodings
#else
if (__l == 0 || __mb_cur_max_l(__l) == 1) // there are no known constant length encodings
@@ -1513,8 +1595,8 @@ codecvt<wchar_t, char, mbstate_t>::do_length(state_type& st,
int nbytes = 0;
for (size_t nwchar_t = 0; nwchar_t < mx && frm != frm_end; ++nwchar_t)
{
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- size_t n = mbrlen_l(frm, frm_end-frm, &st, __l);
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ size_t n = mbrlen_l(frm, static_cast<size_t>(frm_end-frm), &st, __l);
#else
size_t n = __mbrlen_l(frm, frm_end-frm, &st, __l);
#endif
@@ -1524,8 +1606,8 @@ codecvt<wchar_t, char, mbstate_t>::do_length(state_type& st,
++nbytes;
++frm;
break;
- case static_cast<size_t>(-1): // XXX EMSCRIPTEN
- case static_cast<size_t>(-2): // XXX EMSCRIPTEN
+ case size_t(-1):
+ case size_t(-2):
return nbytes;
default:
nbytes += n;
@@ -1539,10 +1621,10 @@ codecvt<wchar_t, char, mbstate_t>::do_length(state_type& st,
int
codecvt<wchar_t, char, mbstate_t>::do_max_length() const _NOEXCEPT
{
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- return __l == 0 ? 1 : MB_CUR_MAX_L(__l);
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ return __l == 0 ? 1 : static_cast<int>( MB_CUR_MAX_L(__l));
#else
- return __l == 0 ? 1 : __mb_cur_max_l(__l);
+ return __l == 0 ? 1 : static_cast<int>(__mb_cur_max_l(__l));
#endif
}
@@ -1997,9 +2079,6 @@ utf8_to_utf16_length(const uint8_t* frm, const uint8_t* frm_end,
break;
uint8_t c2 = frm_nxt[1];
uint8_t c3 = frm_nxt[2];
- uint16_t t = static_cast<uint16_t>(((c1 & 0x0F) << 12)
- | ((c2 & 0x3F) << 6)
- | (c3 & 0x3F));
switch (c1)
{
case 0xE0:
@@ -2017,7 +2096,7 @@ utf8_to_utf16_length(const uint8_t* frm, const uint8_t* frm_end,
}
if ((c3 & 0xC0) != 0x80)
break;
- if ((((c1 & 0x0F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F)) > Maxcode)
+ if ((((c1 & 0x0Fu) << 12) | ((c2 & 0x3Fu) << 6) | (c3 & 0x3Fu)) > Maxcode)
break;
frm_nxt += 3;
}
@@ -2259,7 +2338,7 @@ utf8_to_ucs4_length(const uint8_t* frm, const uint8_t* frm_end,
{
if ((frm_end-frm_nxt < 2) || ((frm_nxt[1] & 0xC0) != 0x80))
break;
- if ((((c1 & 0x1F) << 6) | (frm_nxt[1] & 0x3F)) > Maxcode)
+ if ((((c1 & 0x1Fu) << 6) | (frm_nxt[1] & 0x3Fu)) > Maxcode)
break;
frm_nxt += 2;
}
@@ -2286,7 +2365,7 @@ utf8_to_ucs4_length(const uint8_t* frm, const uint8_t* frm_end,
}
if ((c3 & 0xC0) != 0x80)
break;
- if ((((c1 & 0x0F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F)) > Maxcode)
+ if ((((c1 & 0x0Fu) << 12) | ((c2 & 0x3Fu) << 6) | (c3 & 0x3Fu)) > Maxcode)
break;
frm_nxt += 3;
}
@@ -2314,12 +2393,8 @@ utf8_to_ucs4_length(const uint8_t* frm, const uint8_t* frm_end,
}
if ((c3 & 0xC0) != 0x80 || (c4 & 0xC0) != 0x80)
break;
- uint32_t t = static_cast<uint32_t>(((c1 & 0x07) << 18)
- | ((c2 & 0x3F) << 12)
- | ((c3 & 0x3F) << 6)
- | (c4 & 0x3F));
- if ((((c1 & 0x07) << 18) | ((c2 & 0x3F) << 12) |
- ((c3 & 0x3F) << 6) | (c4 & 0x3F)) > Maxcode)
+ if ((((c1 & 0x07u) << 18) | ((c2 & 0x3Fu) << 12) |
+ ((c3 & 0x3Fu) << 6) | (c4 & 0x3Fu)) > Maxcode)
break;
frm_nxt += 4;
}
@@ -2488,7 +2563,7 @@ utf8_to_ucs2_length(const uint8_t* frm, const uint8_t* frm_end,
{
if ((frm_end-frm_nxt < 2) || ((frm_nxt[1] & 0xC0) != 0x80))
break;
- if ((((c1 & 0x1F) << 6) | (frm_nxt[1] & 0x3F)) > Maxcode)
+ if ((((c1 & 0x1Fu) << 6) | (frm_nxt[1] & 0x3Fu)) > Maxcode)
break;
frm_nxt += 2;
}
@@ -2515,7 +2590,7 @@ utf8_to_ucs2_length(const uint8_t* frm, const uint8_t* frm_end,
}
if ((c3 & 0xC0) != 0x80)
break;
- if ((((c1 & 0x0F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F)) > Maxcode)
+ if ((((c1 & 0x0Fu) << 12) | ((c2 & 0x3Fu) << 6) | (c3 & 0x3Fu)) > Maxcode)
break;
frm_nxt += 3;
}
@@ -2587,7 +2662,7 @@ utf16be_to_ucs4(const uint8_t* frm, const uint8_t* frm_end, const uint8_t*& frm_
}
for (; frm_nxt < frm_end - 1 && to_nxt < to_end; ++to_nxt)
{
- uint16_t c1 = frm_nxt[0] << 8 | frm_nxt[1];
+ uint16_t c1 = static_cast<uint16_t>(frm_nxt[0] << 8 | frm_nxt[1]);
if ((c1 & 0xFC00) == 0xDC00)
return codecvt_base::error;
if ((c1 & 0xFC00) != 0xD800)
@@ -2601,7 +2676,7 @@ utf16be_to_ucs4(const uint8_t* frm, const uint8_t* frm_end, const uint8_t*& frm_
{
if (frm_end-frm_nxt < 4)
return codecvt_base::partial;
- uint16_t c2 = frm_nxt[2] << 8 | frm_nxt[3];
+ uint16_t c2 = static_cast<uint16_t>(frm_nxt[2] << 8 | frm_nxt[3]);
if ((c2 & 0xFC00) != 0xDC00)
return codecvt_base::error;
uint32_t t = static_cast<uint32_t>(
@@ -2624,7 +2699,6 @@ utf16be_to_ucs4_length(const uint8_t* frm, const uint8_t* frm_end,
codecvt_mode mode = codecvt_mode(0))
{
const uint8_t* frm_nxt = frm;
- frm_nxt = frm;
if (mode & consume_header)
{
if (frm_end-frm_nxt >= 2 && frm_nxt[0] == 0xFE && frm_nxt[1] == 0xFF)
@@ -2632,7 +2706,7 @@ utf16be_to_ucs4_length(const uint8_t* frm, const uint8_t* frm_end,
}
for (size_t nchar32_t = 0; frm_nxt < frm_end - 1 && nchar32_t < mx; ++nchar32_t)
{
- uint16_t c1 = frm_nxt[0] << 8 | frm_nxt[1];
+ uint16_t c1 = static_cast<uint16_t>(frm_nxt[0] << 8 | frm_nxt[1]);
if ((c1 & 0xFC00) == 0xDC00)
break;
if ((c1 & 0xFC00) != 0xD800)
@@ -2645,7 +2719,7 @@ utf16be_to_ucs4_length(const uint8_t* frm, const uint8_t* frm_end,
{
if (frm_end-frm_nxt < 4)
break;
- uint16_t c2 = frm_nxt[2] << 8 | frm_nxt[3];
+ uint16_t c2 = static_cast<uint16_t>(frm_nxt[2] << 8 | frm_nxt[3]);
if ((c2 & 0xFC00) != 0xDC00)
break;
uint32_t t = static_cast<uint32_t>(
@@ -2720,7 +2794,7 @@ utf16le_to_ucs4(const uint8_t* frm, const uint8_t* frm_end, const uint8_t*& frm_
}
for (; frm_nxt < frm_end - 1 && to_nxt < to_end; ++to_nxt)
{
- uint16_t c1 = frm_nxt[1] << 8 | frm_nxt[0];
+ uint16_t c1 = static_cast<uint16_t>(frm_nxt[1] << 8 | frm_nxt[0]);
if ((c1 & 0xFC00) == 0xDC00)
return codecvt_base::error;
if ((c1 & 0xFC00) != 0xD800)
@@ -2734,7 +2808,7 @@ utf16le_to_ucs4(const uint8_t* frm, const uint8_t* frm_end, const uint8_t*& frm_
{
if (frm_end-frm_nxt < 4)
return codecvt_base::partial;
- uint16_t c2 = frm_nxt[3] << 8 | frm_nxt[2];
+ uint16_t c2 = static_cast<uint16_t>(frm_nxt[3] << 8 | frm_nxt[2]);
if ((c2 & 0xFC00) != 0xDC00)
return codecvt_base::error;
uint32_t t = static_cast<uint32_t>(
@@ -2757,7 +2831,6 @@ utf16le_to_ucs4_length(const uint8_t* frm, const uint8_t* frm_end,
codecvt_mode mode = codecvt_mode(0))
{
const uint8_t* frm_nxt = frm;
- frm_nxt = frm;
if (mode & consume_header)
{
if (frm_end-frm_nxt >= 2 && frm_nxt[0] == 0xFF && frm_nxt[1] == 0xFE)
@@ -2765,7 +2838,7 @@ utf16le_to_ucs4_length(const uint8_t* frm, const uint8_t* frm_end,
}
for (size_t nchar32_t = 0; frm_nxt < frm_end - 1 && nchar32_t < mx; ++nchar32_t)
{
- uint16_t c1 = frm_nxt[1] << 8 | frm_nxt[0];
+ uint16_t c1 = static_cast<uint16_t>(frm_nxt[1] << 8 | frm_nxt[0]);
if ((c1 & 0xFC00) == 0xDC00)
break;
if ((c1 & 0xFC00) != 0xD800)
@@ -2778,7 +2851,7 @@ utf16le_to_ucs4_length(const uint8_t* frm, const uint8_t* frm_end,
{
if (frm_end-frm_nxt < 4)
break;
- uint16_t c2 = frm_nxt[3] << 8 | frm_nxt[2];
+ uint16_t c2 = static_cast<uint16_t>(frm_nxt[3] << 8 | frm_nxt[2]);
if ((c2 & 0xFC00) != 0xDC00)
break;
uint32_t t = static_cast<uint32_t>(
@@ -2836,7 +2909,7 @@ utf16be_to_ucs2(const uint8_t* frm, const uint8_t* frm_end, const uint8_t*& frm_
}
for (; frm_nxt < frm_end - 1 && to_nxt < to_end; ++to_nxt)
{
- uint16_t c1 = frm_nxt[0] << 8 | frm_nxt[1];
+ uint16_t c1 = static_cast<uint16_t>(frm_nxt[0] << 8 | frm_nxt[1]);
if ((c1 & 0xF800) == 0xD800 || c1 > Maxcode)
return codecvt_base::error;
*to_nxt = c1;
@@ -2852,7 +2925,6 @@ utf16be_to_ucs2_length(const uint8_t* frm, const uint8_t* frm_end,
codecvt_mode mode = codecvt_mode(0))
{
const uint8_t* frm_nxt = frm;
- frm_nxt = frm;
if (mode & consume_header)
{
if (frm_end-frm_nxt >= 2 && frm_nxt[0] == 0xFE && frm_nxt[1] == 0xFF)
@@ -2860,7 +2932,7 @@ utf16be_to_ucs2_length(const uint8_t* frm, const uint8_t* frm_end,
}
for (size_t nchar16_t = 0; frm_nxt < frm_end - 1 && nchar16_t < mx; ++nchar16_t)
{
- uint16_t c1 = frm_nxt[0] << 8 | frm_nxt[1];
+ uint16_t c1 = static_cast<uint16_t>(frm_nxt[0] << 8 | frm_nxt[1]);
if ((c1 & 0xF800) == 0xD800 || c1 > Maxcode)
break;
frm_nxt += 2;
@@ -2911,7 +2983,7 @@ utf16le_to_ucs2(const uint8_t* frm, const uint8_t* frm_end, const uint8_t*& frm_
}
for (; frm_nxt < frm_end - 1 && to_nxt < to_end; ++to_nxt)
{
- uint16_t c1 = frm_nxt[1] << 8 | frm_nxt[0];
+ uint16_t c1 = static_cast<uint16_t>(frm_nxt[1] << 8 | frm_nxt[0]);
if ((c1 & 0xF800) == 0xD800 || c1 > Maxcode)
return codecvt_base::error;
*to_nxt = c1;
@@ -2935,7 +3007,7 @@ utf16le_to_ucs2_length(const uint8_t* frm, const uint8_t* frm_end,
}
for (size_t nchar16_t = 0; frm_nxt < frm_end - 1 && nchar16_t < mx; ++nchar16_t)
{
- uint16_t c1 = frm_nxt[1] << 8 | frm_nxt[0];
+ uint16_t c1 = static_cast<uint16_t>(frm_nxt[1] << 8 | frm_nxt[0]);
if ((c1 & 0xF800) == 0xD800 || c1 > Maxcode)
break;
frm_nxt += 2;
@@ -4088,11 +4160,11 @@ numpunct_byname<char>::__init(const char* nm)
{
__locale_unique_ptr loc(newlocale(LC_ALL_MASK, nm, 0), freelocale);
#ifndef _LIBCPP_NO_EXCEPTIONS
- if (loc == 0)
+ if (loc == nullptr)
throw runtime_error("numpunct_byname<char>::numpunct_byname"
" failed to construct for " + string(nm));
#endif // _LIBCPP_NO_EXCEPTIONS
-#ifdef _LIBCPP_STABLE_APPLE_ABI
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
lconv* lc = localeconv_l(loc.get());
#else
lconv* lc = __localeconv_l(loc.get());
@@ -4131,11 +4203,11 @@ numpunct_byname<wchar_t>::__init(const char* nm)
{
__locale_unique_ptr loc(newlocale(LC_ALL_MASK, nm, 0), freelocale);
#ifndef _LIBCPP_NO_EXCEPTIONS
- if (loc == 0)
+ if (loc == nullptr)
throw runtime_error("numpunct_byname<char>::numpunct_byname"
" failed to construct for " + string(nm));
#endif // _LIBCPP_NO_EXCEPTIONS
-#ifdef _LIBCPP_STABLE_APPLE_ABI
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
lconv* lc = localeconv_l(loc.get());
#else
lconv* lc = __localeconv_l(loc.get());
@@ -4179,7 +4251,7 @@ __check_grouping(const string& __grouping, unsigned* __g, unsigned* __g_end,
{
if (0 < *__ig && *__ig < numeric_limits<char>::max())
{
- if (*__ig != *__r)
+ if (static_cast<unsigned>(*__ig) != *__r)
{
__err = ios_base::failbit;
return;
@@ -4190,7 +4262,7 @@ __check_grouping(const string& __grouping, unsigned* __g, unsigned* __g_end,
}
if (0 < *__ig && *__ig < numeric_limits<char>::max())
{
- if (*__ig < __g_end[-1] || __g_end[-1] == 0)
+ if (static_cast<unsigned>(*__ig) < __g_end[-1] || __g_end[-1] == 0)
__err = ios_base::failbit;
}
}
@@ -4563,11 +4635,14 @@ __time_get::~__time_get()
freelocale(__loc_);
}
+#pragma clang diagnostic ignored "-Wmissing-field-initializers"
+#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+
template <>
string
__time_get_storage<char>::__analyze(char fmt, const ctype<char>& ct)
{
- tm t;
+ tm t = {0};
t.tm_sec = 59;
t.tm_min = 55;
t.tm_hour = 23;
@@ -4581,7 +4656,7 @@ __time_get_storage<char>::__analyze(char fmt, const ctype<char>& ct)
char f[3] = {0};
f[0] = '%';
f[1] = fmt;
- size_t n = strftime_l(buf, 100, f, &t, __loc_);
+ size_t n = strftime_l(buf, countof(buf), f, &t, __loc_);
char* bb = buf;
char* be = buf + n;
string result;
@@ -4596,7 +4671,7 @@ __time_get_storage<char>::__analyze(char fmt, const ctype<char>& ct)
}
char* w = bb;
ios_base::iostate err = ios_base::goodbit;
- int i = __scan_keyword(w, be, this->__weeks_, this->__weeks_+14,
+ ptrdiff_t i = __scan_keyword(w, be, this->__weeks_, this->__weeks_+14,
ct, err, false)
- this->__weeks_;
if (i < 14)
@@ -4707,11 +4782,13 @@ __time_get_storage<char>::__analyze(char fmt, const ctype<char>& ct)
return result;
}
+#pragma clang diagnostic ignored "-Wmissing-braces"
+
template <>
wstring
__time_get_storage<wchar_t>::__analyze(char fmt, const ctype<wchar_t>& ct)
{
- tm t;
+ tm t = {0};
t.tm_sec = 59;
t.tm_min = 55;
t.tm_hour = 23;
@@ -4725,19 +4802,19 @@ __time_get_storage<wchar_t>::__analyze(char fmt, const ctype<wchar_t>& ct)
char f[3] = {0};
f[0] = '%';
f[1] = fmt;
- size_t be = strftime_l(buf, 100, f, &t, __loc_);
+ strftime_l(buf, countof(buf), f, &t, __loc_);
wchar_t wbuf[100];
wchar_t* wbb = wbuf;
mbstate_t mb = {0};
const char* bb = buf;
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- size_t i = mbsrtowcs_l( wbb, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, __loc_);
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ size_t j = mbsrtowcs_l( wbb, &bb, countof(wbuf), &mb, __loc_);
#else
- size_t i = __mbsrtowcs_l( wbb, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, __loc_);
+ size_t j = __mbsrtowcs_l( wbb, &bb, countof(wbuf), &mb, __loc_);
#endif
- if (i == -1)
+ if (j == size_t(-1))
__throw_runtime_error("locale not supported");
- wchar_t* wbe = wbb + i;
+ wchar_t* wbe = wbb + j;
wstring result;
while (wbb != wbe)
{
@@ -4750,7 +4827,7 @@ __time_get_storage<wchar_t>::__analyze(char fmt, const ctype<wchar_t>& ct)
}
wchar_t* w = wbb;
ios_base::iostate err = ios_base::goodbit;
- int i = __scan_keyword(w, wbe, this->__weeks_, this->__weeks_+14,
+ ptrdiff_t i = __scan_keyword(w, wbe, this->__weeks_, this->__weeks_+14,
ct, err, false)
- this->__weeks_;
if (i < 14)
@@ -4865,32 +4942,32 @@ template <>
void
__time_get_storage<char>::init(const ctype<char>& ct)
{
- tm t;
+ tm t = {0};
char buf[100];
// __weeks_
for (int i = 0; i < 7; ++i)
{
t.tm_wday = i;
- strftime_l(buf, 100, "%A", &t, __loc_);
+ strftime_l(buf, countof(buf), "%A", &t, __loc_);
__weeks_[i] = buf;
- strftime_l(buf, 100, "%a", &t, __loc_);
+ strftime_l(buf, countof(buf), "%a", &t, __loc_);
__weeks_[i+7] = buf;
}
// __months_
for (int i = 0; i < 12; ++i)
{
t.tm_mon = i;
- strftime_l(buf, 100, "%B", &t, __loc_);
+ strftime_l(buf, countof(buf), "%B", &t, __loc_);
__months_[i] = buf;
- strftime_l(buf, 100, "%b", &t, __loc_);
+ strftime_l(buf, countof(buf), "%b", &t, __loc_);
__months_[i+12] = buf;
}
// __am_pm_
t.tm_hour = 1;
- strftime_l(buf, 100, "%p", &t, __loc_);
+ strftime_l(buf, countof(buf), "%p", &t, __loc_);
__am_pm_[0] = buf;
t.tm_hour = 13;
- strftime_l(buf, 100, "%p", &t, __loc_);
+ strftime_l(buf, countof(buf), "%p", &t, __loc_);
__am_pm_[1] = buf;
__c_ = __analyze('c', ct);
__r_ = __analyze('r', ct);
@@ -4904,7 +4981,6 @@ __time_get_storage<wchar_t>::init(const ctype<wchar_t>& ct)
{
tm t = {0};
char buf[100];
- size_t be;
wchar_t wbuf[100];
wchar_t* wbe;
mbstate_t mb = {0};
@@ -4912,27 +4988,27 @@ __time_get_storage<wchar_t>::init(const ctype<wchar_t>& ct)
for (int i = 0; i < 7; ++i)
{
t.tm_wday = i;
- be = strftime_l(buf, 100, "%A", &t, __loc_);
+ strftime_l(buf, countof(buf), "%A", &t, __loc_);
mb = mbstate_t();
const char* bb = buf;
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- size_t j = mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, __loc_);
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ size_t j = mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, __loc_);
#else
- size_t j = __mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, __loc_);
+ size_t j = __mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, __loc_);
#endif
- if (j == -1)
+ if (j == size_t(-1))
__throw_runtime_error("locale not supported");
wbe = wbuf + j;
__weeks_[i].assign(wbuf, wbe);
- be = strftime_l(buf, 100, "%a", &t, __loc_);
+ strftime_l(buf, countof(buf), "%a", &t, __loc_);
mb = mbstate_t();
bb = buf;
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- j = mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, __loc_);
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ j = mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, __loc_);
#else
- j = __mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, __loc_);
+ j = __mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, __loc_);
#endif
- if (j == -1)
+ if (j == size_t(-1))
__throw_runtime_error("locale not supported");
wbe = wbuf + j;
__weeks_[i+7].assign(wbuf, wbe);
@@ -4941,55 +5017,55 @@ __time_get_storage<wchar_t>::init(const ctype<wchar_t>& ct)
for (int i = 0; i < 12; ++i)
{
t.tm_mon = i;
- be = strftime_l(buf, 100, "%B", &t, __loc_);
+ strftime_l(buf, countof(buf), "%B", &t, __loc_);
mb = mbstate_t();
const char* bb = buf;
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- size_t j = mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, __loc_);
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ size_t j = mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, __loc_);
#else
- size_t j = __mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, __loc_);
+ size_t j = __mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, __loc_);
#endif
- if (j == -1)
+ if (j == size_t(-1))
__throw_runtime_error("locale not supported");
wbe = wbuf + j;
__months_[i].assign(wbuf, wbe);
- be = strftime_l(buf, 100, "%b", &t, __loc_);
+ strftime_l(buf, countof(buf), "%b", &t, __loc_);
mb = mbstate_t();
bb = buf;
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- j = mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, __loc_);
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ j = mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, __loc_);
#else
- j = __mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, __loc_);
+ j = __mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, __loc_);
#endif
- if (j == -1)
+ if (j == size_t(-1))
__throw_runtime_error("locale not supported");
wbe = wbuf + j;
__months_[i+12].assign(wbuf, wbe);
}
// __am_pm_
t.tm_hour = 1;
- be = strftime_l(buf, 100, "%p", &t, __loc_);
+ strftime_l(buf, countof(buf), "%p", &t, __loc_);
mb = mbstate_t();
const char* bb = buf;
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- size_t j = mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, __loc_);
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ size_t j = mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, __loc_);
#else
- size_t j = __mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, __loc_);
+ size_t j = __mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, __loc_);
#endif
- if (j == -1)
+ if (j == size_t(-1))
__throw_runtime_error("locale not supported");
wbe = wbuf + j;
__am_pm_[0].assign(wbuf, wbe);
t.tm_hour = 13;
- be = strftime_l(buf, 100, "%p", &t, __loc_);
+ strftime_l(buf, countof(buf), "%p", &t, __loc_);
mb = mbstate_t();
bb = buf;
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- j = mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, __loc_);
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ j = mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, __loc_);
#else
- j = __mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, __loc_);
+ j = __mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, __loc_);
#endif
- if (j == -1)
+ if (j == size_t(-1))
__throw_runtime_error("locale not supported");
wbe = wbuf + j;
__am_pm_[1].assign(wbuf, wbe);
@@ -5250,7 +5326,7 @@ __time_put::__do_put(char* __nb, char*& __ne, const tm* __tm,
char fmt[] = {'%', __fmt, __mod, 0};
if (__mod != 0)
swap(fmt[1], fmt[2]);
- size_t n = strftime_l(__nb, __ne-__nb, fmt, __tm, __loc_);
+ size_t n = strftime_l(__nb, countof(__nb, __ne), fmt, __tm, __loc_);
__ne = __nb + n;
}
@@ -5263,128 +5339,212 @@ __time_put::__do_put(wchar_t* __wb, wchar_t*& __we, const tm* __tm,
__do_put(__nar, __ne, __tm, __fmt, __mod);
mbstate_t mb = {0};
const char* __nb = __nar;
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- size_t j = mbsrtowcs_l(__wb, &__nb, 100, &mb, __loc_);
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ size_t j = mbsrtowcs_l(__wb, &__nb, countof(__wb, __we), &mb, __loc_);
#else
- size_t j = __mbsrtowcs_l(__wb, &__nb, 100, &mb, __loc_);
+ size_t j = __mbsrtowcs_l(__wb, &__nb, countof(__wb, __we), &mb, __loc_);
#endif
- if (j == -1)
+ if (j == size_t(-1))
__throw_runtime_error("locale not supported");
__we = __wb + j;
}
// moneypunct_byname
+template <class charT>
static
void
-__init_pat(money_base::pattern& pat, char cs_precedes, char sep_by_space, char sign_posn)
+__init_pat(money_base::pattern& pat, basic_string<charT>& __curr_symbol_,
+ bool intl, char cs_precedes, char sep_by_space, char sign_posn,
+ charT space_char)
{
const char sign = static_cast<char>(money_base::sign);
const char space = static_cast<char>(money_base::space);
const char none = static_cast<char>(money_base::none);
const char symbol = static_cast<char>(money_base::symbol);
const char value = static_cast<char>(money_base::value);
+ const bool symbol_contains_sep = intl && __curr_symbol_.size() == 4;
+
+ // Comments on case branches reflect 'C11 7.11.2.1 The localeconv
+ // function'. "Space between sign and symbol or value" means that
+ // if the sign is adjacent to the symbol, there's a space between
+ // them, and otherwise there's a space between the sign and value.
+ //
+ // C11's localeconv specifies that the fourth character of an
+ // international curr_symbol is used to separate the sign and
+ // value when sep_by_space says to do so. C++ can't represent
+ // that, so we just use a space. When sep_by_space says to
+ // separate the symbol and value-or-sign with a space, we rearrange the
+ // curr_symbol to put its spacing character on the correct side of
+ // the symbol.
+ //
+ // We also need to avoid adding an extra space between the sign
+ // and value when the currency symbol is suppressed (by not
+ // setting showbase). We match glibc's strfmon by interpreting
+ // sep_by_space==1 as "omit the space when the currency symbol is
+ // absent".
+ //
+ // Users who want to get this right should use ICU instead.
+
switch (cs_precedes)
{
- case 0:
+ case 0: // value before curr_symbol
+ if (symbol_contains_sep) {
+ // Move the separator to before the symbol, to place it
+ // between the value and symbol.
+ rotate(__curr_symbol_.begin(), __curr_symbol_.begin() + 3,
+ __curr_symbol_.end());
+ }
switch (sign_posn)
{
- case 0:
+ case 0: // Parentheses surround the quantity and currency symbol.
pat.field[0] = sign;
pat.field[1] = value;
+ pat.field[2] = none; // Any space appears in the symbol.
pat.field[3] = symbol;
switch (sep_by_space)
{
- case 0:
- pat.field[2] = none;
+ case 0: // No space separates the currency symbol and value.
+ // This case may have changed between C99 and C11;
+ // assume the currency symbol matches the intention.
+ case 2: // Space between sign and currency or value.
+ // The "sign" is two parentheses, so no space here either.
return;
- case 1:
- case 2:
- pat.field[2] = space;
+ case 1: // Space between currency-and-sign or currency and value.
+ if (!symbol_contains_sep) {
+ // We insert the space into the symbol instead of
+ // setting pat.field[2]=space so that when
+ // showbase is not set, the space goes away too.
+ __curr_symbol_.insert(0, 1, space_char);
+ }
return;
default:
break;
}
break;
- case 1:
+ case 1: // The sign string precedes the quantity and currency symbol.
pat.field[0] = sign;
pat.field[3] = symbol;
switch (sep_by_space)
{
- case 0:
+ case 0: // No space separates the currency symbol and value.
pat.field[1] = value;
pat.field[2] = none;
return;
- case 1:
+ case 1: // Space between currency-and-sign or currency and value.
pat.field[1] = value;
- pat.field[2] = space;
+ pat.field[2] = none;
+ if (!symbol_contains_sep) {
+ // We insert the space into the symbol instead of
+ // setting pat.field[2]=space so that when
+ // showbase is not set, the space goes away too.
+ __curr_symbol_.insert(0, 1, space_char);
+ }
return;
- case 2:
+ case 2: // Space between sign and currency or value.
pat.field[1] = space;
pat.field[2] = value;
+ if (symbol_contains_sep) {
+ // Remove the separator from the symbol, since it
+ // has already appeared after the sign.
+ __curr_symbol_.erase(__curr_symbol_.begin());
+ }
return;
default:
break;
}
break;
- case 2:
+ case 2: // The sign string succeeds the quantity and currency symbol.
pat.field[0] = value;
pat.field[3] = sign;
switch (sep_by_space)
{
- case 0:
+ case 0: // No space separates the currency symbol and value.
pat.field[1] = none;
pat.field[2] = symbol;
return;
- case 1:
- pat.field[1] = space;
+ case 1: // Space between currency-and-sign or currency and value.
+ if (!symbol_contains_sep) {
+ // We insert the space into the symbol instead of
+ // setting pat.field[1]=space so that when
+ // showbase is not set, the space goes away too.
+ __curr_symbol_.insert(0, 1, space_char);
+ }
+ pat.field[1] = none;
pat.field[2] = symbol;
return;
- case 2:
+ case 2: // Space between sign and currency or value.
pat.field[1] = symbol;
pat.field[2] = space;
+ if (symbol_contains_sep) {
+ // Remove the separator from the symbol, since it
+ // should not be removed if showbase is absent.
+ __curr_symbol_.erase(__curr_symbol_.begin());
+ }
return;
default:
break;
}
break;
- case 3:
+ case 3: // The sign string immediately precedes the currency symbol.
pat.field[0] = value;
pat.field[3] = symbol;
switch (sep_by_space)
{
- case 0:
+ case 0: // No space separates the currency symbol and value.
pat.field[1] = none;
pat.field[2] = sign;
return;
- case 1:
+ case 1: // Space between currency-and-sign or currency and value.
pat.field[1] = space;
pat.field[2] = sign;
+ if (symbol_contains_sep) {
+ // Remove the separator from the symbol, since it
+ // has already appeared before the sign.
+ __curr_symbol_.erase(__curr_symbol_.begin());
+ }
return;
- case 2:
+ case 2: // Space between sign and currency or value.
pat.field[1] = sign;
- pat.field[2] = space;
+ pat.field[2] = none;
+ if (!symbol_contains_sep) {
+ // We insert the space into the symbol instead of
+ // setting pat.field[2]=space so that when
+ // showbase is not set, the space goes away too.
+ __curr_symbol_.insert(0, 1, space_char);
+ }
return;
default:
break;
}
break;
- case 4:
+ case 4: // The sign string immediately succeeds the currency symbol.
pat.field[0] = value;
pat.field[3] = sign;
switch (sep_by_space)
{
- case 0:
+ case 0: // No space separates the currency symbol and value.
pat.field[1] = none;
pat.field[2] = symbol;
return;
- case 1:
- pat.field[1] = space;
+ case 1: // Space between currency-and-sign or currency and value.
+ pat.field[1] = none;
pat.field[2] = symbol;
+ if (!symbol_contains_sep) {
+ // We insert the space into the symbol instead of
+ // setting pat.field[1]=space so that when
+ // showbase is not set, the space goes away too.
+ __curr_symbol_.insert(0, 1, space_char);
+ }
return;
- case 2:
+ case 2: // Space between sign and currency or value.
pat.field[1] = symbol;
pat.field[2] = space;
+ if (symbol_contains_sep) {
+ // Remove the separator from the symbol, since it
+ // should not disappear when showbase is absent.
+ __curr_symbol_.erase(__curr_symbol_.begin());
+ }
return;
default:
break;
@@ -5394,105 +5554,157 @@ __init_pat(money_base::pattern& pat, char cs_precedes, char sep_by_space, char s
break;
}
break;
- case 1:
+ case 1: // curr_symbol before value
switch (sign_posn)
{
- case 0:
+ case 0: // Parentheses surround the quantity and currency symbol.
pat.field[0] = sign;
pat.field[1] = symbol;
+ pat.field[2] = none; // Any space appears in the symbol.
pat.field[3] = value;
switch (sep_by_space)
{
- case 0:
- pat.field[2] = none;
+ case 0: // No space separates the currency symbol and value.
+ // This case may have changed between C99 and C11;
+ // assume the currency symbol matches the intention.
+ case 2: // Space between sign and currency or value.
+ // The "sign" is two parentheses, so no space here either.
return;
- case 1:
- case 2:
- pat.field[2] = space;
+ case 1: // Space between currency-and-sign or currency and value.
+ if (!symbol_contains_sep) {
+ // We insert the space into the symbol instead of
+ // setting pat.field[2]=space so that when
+ // showbase is not set, the space goes away too.
+ __curr_symbol_.insert(0, 1, space_char);
+ }
return;
default:
break;
}
break;
- case 1:
+ case 1: // The sign string precedes the quantity and currency symbol.
pat.field[0] = sign;
pat.field[3] = value;
switch (sep_by_space)
{
- case 0:
+ case 0: // No space separates the currency symbol and value.
pat.field[1] = symbol;
pat.field[2] = none;
return;
- case 1:
+ case 1: // Space between currency-and-sign or currency and value.
pat.field[1] = symbol;
- pat.field[2] = space;
+ pat.field[2] = none;
+ if (!symbol_contains_sep) {
+ // We insert the space into the symbol instead of
+ // setting pat.field[2]=space so that when
+ // showbase is not set, the space goes away too.
+ __curr_symbol_.push_back(space_char);
+ }
return;
- case 2:
+ case 2: // Space between sign and currency or value.
pat.field[1] = space;
pat.field[2] = symbol;
+ if (symbol_contains_sep) {
+ // Remove the separator from the symbol, since it
+ // has already appeared after the sign.
+ __curr_symbol_.pop_back();
+ }
return;
default:
break;
}
break;
- case 2:
+ case 2: // The sign string succeeds the quantity and currency symbol.
pat.field[0] = symbol;
pat.field[3] = sign;
switch (sep_by_space)
{
- case 0:
+ case 0: // No space separates the currency symbol and value.
pat.field[1] = none;
pat.field[2] = value;
return;
- case 1:
- pat.field[1] = space;
+ case 1: // Space between currency-and-sign or currency and value.
+ pat.field[1] = none;
pat.field[2] = value;
+ if (!symbol_contains_sep) {
+ // We insert the space into the symbol instead of
+ // setting pat.field[1]=space so that when
+ // showbase is not set, the space goes away too.
+ __curr_symbol_.push_back(space_char);
+ }
return;
- case 2:
+ case 2: // Space between sign and currency or value.
pat.field[1] = value;
pat.field[2] = space;
+ if (symbol_contains_sep) {
+ // Remove the separator from the symbol, since it
+ // will appear before the sign.
+ __curr_symbol_.pop_back();
+ }
return;
default:
break;
}
break;
- case 3:
+ case 3: // The sign string immediately precedes the currency symbol.
pat.field[0] = sign;
pat.field[3] = value;
switch (sep_by_space)
{
- case 0:
+ case 0: // No space separates the currency symbol and value.
pat.field[1] = symbol;
pat.field[2] = none;
return;
- case 1:
+ case 1: // Space between currency-and-sign or currency and value.
pat.field[1] = symbol;
- pat.field[2] = space;
+ pat.field[2] = none;
+ if (!symbol_contains_sep) {
+ // We insert the space into the symbol instead of
+ // setting pat.field[2]=space so that when
+ // showbase is not set, the space goes away too.
+ __curr_symbol_.push_back(space_char);
+ }
return;
- case 2:
+ case 2: // Space between sign and currency or value.
pat.field[1] = space;
pat.field[2] = symbol;
+ if (symbol_contains_sep) {
+ // Remove the separator from the symbol, since it
+ // has already appeared after the sign.
+ __curr_symbol_.pop_back();
+ }
return;
default:
break;
}
break;
- case 4:
+ case 4: // The sign string immediately succeeds the currency symbol.
pat.field[0] = symbol;
pat.field[3] = value;
switch (sep_by_space)
{
- case 0:
+ case 0: // No space separates the currency symbol and value.
pat.field[1] = sign;
pat.field[2] = none;
return;
- case 1:
+ case 1: // Space between currency-and-sign or currency and value.
pat.field[1] = sign;
pat.field[2] = space;
+ if (symbol_contains_sep) {
+ // Remove the separator from the symbol, since it
+ // should not disappear when showbase is absent.
+ __curr_symbol_.pop_back();
+ }
return;
- case 2:
- pat.field[1] = space;
+ case 2: // Space between sign and currency or value.
+ pat.field[1] = none;
pat.field[2] = sign;
+ if (!symbol_contains_sep) {
+ // We insert the space into the symbol instead of
+ // setting pat.field[1]=space so that when
+ // showbase is not set, the space goes away too.
+ __curr_symbol_.push_back(space_char);
+ }
return;
default:
break;
@@ -5518,11 +5730,11 @@ moneypunct_byname<char, false>::init(const char* nm)
typedef moneypunct<char, false> base;
__locale_unique_ptr loc(newlocale(LC_ALL_MASK, nm, 0), freelocale);
#ifndef _LIBCPP_NO_EXCEPTIONS
- if (loc == 0)
+ if (loc == nullptr)
throw runtime_error("moneypunct_byname"
" failed to construct for " + string(nm));
#endif // _LIBCPP_NO_EXCEPTIONS
-#ifdef _LIBCPP_STABLE_APPLE_ABI
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
lconv* lc = localeconv_l(loc.get());
#else
lconv* lc = __localeconv_l(loc.get());
@@ -5549,8 +5761,14 @@ moneypunct_byname<char, false>::init(const char* nm)
__negative_sign_ = "()";
else
__negative_sign_ = lc->negative_sign;
- __init_pat(__pos_format_, lc->p_cs_precedes, lc->p_sep_by_space, lc->p_sign_posn);
- __init_pat(__neg_format_, lc->n_cs_precedes, lc->n_sep_by_space, lc->n_sign_posn);
+ // Assume the positive and negative formats will want spaces in
+ // the same places in curr_symbol since there's no way to
+ // represent anything else.
+ string_type __dummy_curr_symbol = __curr_symbol_;
+ __init_pat(__pos_format_, __dummy_curr_symbol, false,
+ lc->p_cs_precedes, lc->p_sep_by_space, lc->p_sign_posn, ' ');
+ __init_pat(__neg_format_, __curr_symbol_, false,
+ lc->n_cs_precedes, lc->n_sep_by_space, lc->n_sign_posn, ' ');
}
template<>
@@ -5560,11 +5778,11 @@ moneypunct_byname<char, true>::init(const char* nm)
typedef moneypunct<char, true> base;
__locale_unique_ptr loc(newlocale(LC_ALL_MASK, nm, 0), freelocale);
#ifndef _LIBCPP_NO_EXCEPTIONS
- if (loc == 0)
+ if (loc == nullptr)
throw runtime_error("moneypunct_byname"
" failed to construct for " + string(nm));
#endif // _LIBCPP_NO_EXCEPTIONS
-#ifdef _LIBCPP_STABLE_APPLE_ABI
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
lconv* lc = localeconv_l(loc.get());
#else
lconv* lc = __localeconv_l(loc.get());
@@ -5583,7 +5801,7 @@ moneypunct_byname<char, true>::init(const char* nm)
__frac_digits_ = lc->int_frac_digits;
else
__frac_digits_ = base::do_frac_digits();
-#if _WIN32
+#ifdef _WIN32
if (lc->p_sign_posn == 0)
#else // _WIN32
if (lc->int_p_sign_posn == 0)
@@ -5591,7 +5809,7 @@ moneypunct_byname<char, true>::init(const char* nm)
__positive_sign_ = "()";
else
__positive_sign_ = lc->positive_sign;
-#if _WIN32
+#ifdef _WIN32
if(lc->n_sign_posn == 0)
#else // _WIN32
if (lc->int_n_sign_posn == 0)
@@ -5599,12 +5817,22 @@ moneypunct_byname<char, true>::init(const char* nm)
__negative_sign_ = "()";
else
__negative_sign_ = lc->negative_sign;
-#if _WIN32
- __init_pat(__pos_format_, lc->p_cs_precedes, lc->p_sep_by_space, lc->p_sign_posn);
- __init_pat(__neg_format_, lc->n_cs_precedes, lc->n_sep_by_space, lc->n_sign_posn);
+ // Assume the positive and negative formats will want spaces in
+ // the same places in curr_symbol since there's no way to
+ // represent anything else.
+ string_type __dummy_curr_symbol = __curr_symbol_;
+#ifdef _WIN32
+ __init_pat(__pos_format_, __dummy_curr_symbol, true,
+ lc->p_cs_precedes, lc->p_sep_by_space, lc->p_sign_posn, ' ');
+ __init_pat(__neg_format_, __curr_symbol_, true,
+ lc->n_cs_precedes, lc->n_sep_by_space, lc->n_sign_posn, ' ');
#else
- __init_pat(__pos_format_, lc->int_p_cs_precedes, lc->int_p_sep_by_space, lc->int_p_sign_posn);
- __init_pat(__neg_format_, lc->int_n_cs_precedes, lc->int_n_sep_by_space, lc->int_n_sign_posn);
+ __init_pat(__pos_format_, __dummy_curr_symbol, true,
+ lc->int_p_cs_precedes, lc->int_p_sep_by_space,
+ lc->int_p_sign_posn, ' ');
+ __init_pat(__neg_format_, __curr_symbol_, true,
+ lc->int_n_cs_precedes, lc->int_n_sep_by_space,
+ lc->int_n_sign_posn, ' ');
#endif // _WIN32
}
@@ -5615,11 +5843,11 @@ moneypunct_byname<wchar_t, false>::init(const char* nm)
typedef moneypunct<wchar_t, false> base;
__locale_unique_ptr loc(newlocale(LC_ALL_MASK, nm, 0), freelocale);
#ifndef _LIBCPP_NO_EXCEPTIONS
- if (loc == 0)
+ if (loc == nullptr)
throw runtime_error("moneypunct_byname"
" failed to construct for " + string(nm));
#endif // _LIBCPP_NO_EXCEPTIONS
-#ifdef _LIBCPP_STABLE_APPLE_ABI
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
lconv* lc = localeconv_l(loc.get());
#else
lconv* lc = __localeconv_l(loc.get());
@@ -5636,12 +5864,12 @@ moneypunct_byname<wchar_t, false>::init(const char* nm)
wchar_t wbuf[100];
mbstate_t mb = {0};
const char* bb = lc->currency_symbol;
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- size_t j = mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, loc.get());
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ size_t j = mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, loc.get());
#else
- size_t j = __mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, loc.get());
+ size_t j = __mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, loc.get());
#endif
- if (j == -1)
+ if (j == size_t(-1))
__throw_runtime_error("locale not supported");
wchar_t* wbe = wbuf + j;
__curr_symbol_.assign(wbuf, wbe);
@@ -5655,12 +5883,12 @@ moneypunct_byname<wchar_t, false>::init(const char* nm)
{
mb = mbstate_t();
bb = lc->positive_sign;
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- j = mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, loc.get());
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ j = mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, loc.get());
#else
- j = __mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, loc.get());
+ j = __mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, loc.get());
#endif
- if (j == -1)
+ if (j == size_t(-1))
__throw_runtime_error("locale not supported");
wbe = wbuf + j;
__positive_sign_.assign(wbuf, wbe);
@@ -5671,18 +5899,24 @@ moneypunct_byname<wchar_t, false>::init(const char* nm)
{
mb = mbstate_t();
bb = lc->negative_sign;
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- j = mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, loc.get());
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ j = mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, loc.get());
#else
- j = __mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, loc.get());
+ j = __mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, loc.get());
#endif
- if (j == -1)
+ if (j == size_t(-1))
__throw_runtime_error("locale not supported");
wbe = wbuf + j;
__negative_sign_.assign(wbuf, wbe);
}
- __init_pat(__pos_format_, lc->p_cs_precedes, lc->p_sep_by_space, lc->p_sign_posn);
- __init_pat(__neg_format_, lc->n_cs_precedes, lc->n_sep_by_space, lc->n_sign_posn);
+ // Assume the positive and negative formats will want spaces in
+ // the same places in curr_symbol since there's no way to
+ // represent anything else.
+ string_type __dummy_curr_symbol = __curr_symbol_;
+ __init_pat(__pos_format_, __dummy_curr_symbol, false,
+ lc->p_cs_precedes, lc->p_sep_by_space, lc->p_sign_posn, L' ');
+ __init_pat(__neg_format_, __curr_symbol_, false,
+ lc->n_cs_precedes, lc->n_sep_by_space, lc->n_sign_posn, L' ');
}
template<>
@@ -5692,11 +5926,11 @@ moneypunct_byname<wchar_t, true>::init(const char* nm)
typedef moneypunct<wchar_t, true> base;
__locale_unique_ptr loc(newlocale(LC_ALL_MASK, nm, 0), freelocale);
#ifndef _LIBCPP_NO_EXCEPTIONS
- if (loc == 0)
+ if (loc == nullptr)
throw runtime_error("moneypunct_byname"
" failed to construct for " + string(nm));
#endif // _LIBCPP_NO_EXCEPTIONS
-#ifdef _LIBCPP_STABLE_APPLE_ABI
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
lconv* lc = localeconv_l(loc.get());
#else
lconv* lc = __localeconv_l(loc.get());
@@ -5713,12 +5947,12 @@ moneypunct_byname<wchar_t, true>::init(const char* nm)
wchar_t wbuf[100];
mbstate_t mb = {0};
const char* bb = lc->int_curr_symbol;
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- size_t j = mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, loc.get());
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ size_t j = mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, loc.get());
#else
- size_t j = __mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, loc.get());
+ size_t j = __mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, loc.get());
#endif
- if (j == -1)
+ if (j == size_t(-1))
__throw_runtime_error("locale not supported");
wchar_t* wbe = wbuf + j;
__curr_symbol_.assign(wbuf, wbe);
@@ -5726,7 +5960,7 @@ moneypunct_byname<wchar_t, true>::init(const char* nm)
__frac_digits_ = lc->int_frac_digits;
else
__frac_digits_ = base::do_frac_digits();
-#if _WIN32
+#ifdef _WIN32
if (lc->p_sign_posn == 0)
#else // _WIN32
if (lc->int_p_sign_posn == 0)
@@ -5736,17 +5970,17 @@ moneypunct_byname<wchar_t, true>::init(const char* nm)
{
mb = mbstate_t();
bb = lc->positive_sign;
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- j = mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, loc.get());
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ j = mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, loc.get());
#else
- j = __mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, loc.get());
+ j = __mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, loc.get());
#endif
- if (j == -1)
+ if (j == size_t(-1))
__throw_runtime_error("locale not supported");
wbe = wbuf + j;
__positive_sign_.assign(wbuf, wbe);
}
-#if _WIN32
+#ifdef _WIN32
if (lc->n_sign_posn == 0)
#else // _WIN32
if (lc->int_n_sign_posn == 0)
@@ -5756,22 +5990,32 @@ moneypunct_byname<wchar_t, true>::init(const char* nm)
{
mb = mbstate_t();
bb = lc->negative_sign;
-#ifdef _LIBCPP_STABLE_APPLE_ABI
- j = mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, loc.get());
+#ifdef _LIBCPP_LOCALE__L_EXTENSIONS
+ j = mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, loc.get());
#else
- j = __mbsrtowcs_l(wbuf, &bb, sizeof(wbuf)/sizeof(wbuf[0]), &mb, loc.get());
+ j = __mbsrtowcs_l(wbuf, &bb, countof(wbuf), &mb, loc.get());
#endif
- if (j == -1)
+ if (j == size_t(-1))
__throw_runtime_error("locale not supported");
wbe = wbuf + j;
__negative_sign_.assign(wbuf, wbe);
}
-#if _WIN32
- __init_pat(__pos_format_, lc->p_cs_precedes, lc->p_sep_by_space, lc->p_sign_posn);
- __init_pat(__neg_format_, lc->n_cs_precedes, lc->n_sep_by_space, lc->n_sign_posn);
+ // Assume the positive and negative formats will want spaces in
+ // the same places in curr_symbol since there's no way to
+ // represent anything else.
+ string_type __dummy_curr_symbol = __curr_symbol_;
+#ifdef _WIN32
+ __init_pat(__pos_format_, __dummy_curr_symbol, true,
+ lc->p_cs_precedes, lc->p_sep_by_space, lc->p_sign_posn, L' ');
+ __init_pat(__neg_format_, __curr_symbol_, true,
+ lc->n_cs_precedes, lc->n_sep_by_space, lc->n_sign_posn, L' ');
#else // _WIN32
- __init_pat(__pos_format_, lc->int_p_cs_precedes, lc->int_p_sep_by_space, lc->int_p_sign_posn);
- __init_pat(__neg_format_, lc->int_n_cs_precedes, lc->int_n_sep_by_space, lc->int_n_sign_posn);
+ __init_pat(__pos_format_, __dummy_curr_symbol, true,
+ lc->int_p_cs_precedes, lc->int_p_sep_by_space,
+ lc->int_p_sign_posn, L' ');
+ __init_pat(__neg_format_, __curr_symbol_, true,
+ lc->int_n_cs_precedes, lc->int_n_sep_by_space,
+ lc->int_n_sign_posn, L' ');
#endif // _WIN32
}
@@ -5790,14 +6034,14 @@ template class collate<wchar_t>;
template class num_get<char>;
template class num_get<wchar_t>;
-template class __num_get<char>;
-template class __num_get<wchar_t>;
+template struct __num_get<char>;
+template struct __num_get<wchar_t>;
template class num_put<char>;
template class num_put<wchar_t>;
-template class __num_put<char>;
-template class __num_put<wchar_t>;
+template struct __num_put<char>;
+template struct __num_put<wchar_t>;
template class time_get<char>;
template class time_get<wchar_t>;
diff --git a/system/lib/libcxx/memory.cpp b/system/lib/libcxx/memory.cpp
index cb5e5e7b..98bcc864 100644
--- a/system/lib/libcxx/memory.cpp
+++ b/system/lib/libcxx/memory.cpp
@@ -7,7 +7,10 @@
//
//===----------------------------------------------------------------------===//
+#define _LIBCPP_BUILDING_MEMORY
#include "memory"
+#include "mutex"
+#include "thread"
_LIBCPP_BEGIN_NAMESPACE_STD
@@ -100,10 +103,7 @@ __shared_weak_count::lock() _NOEXCEPT
if (__sync_bool_compare_and_swap(&__shared_owners_,
object_owners,
object_owners+1))
- {
- __add_weak();
return this;
- }
object_owners = __shared_owners_;
}
return 0;
@@ -119,6 +119,61 @@ __shared_weak_count::__get_deleter(const type_info&) const _NOEXCEPT
#endif // _LIBCPP_NO_RTTI
+#if __has_feature(cxx_atomic)
+
+static const std::size_t __sp_mut_count = 16;
+static pthread_mutex_t mut_back_imp[__sp_mut_count] =
+{
+ PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER,
+ PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER,
+ PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER,
+ PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER
+};
+
+static mutex* mut_back = reinterpret_cast<std::mutex*>(mut_back_imp);
+
+_LIBCPP_CONSTEXPR __sp_mut::__sp_mut(void* p) _NOEXCEPT
+ : __lx(p)
+{
+}
+
+void
+__sp_mut::lock() _NOEXCEPT
+{
+ mutex& m = *static_cast<mutex*>(__lx);
+ unsigned count = 0;
+ while (!m.try_lock())
+ {
+ if (++count > 16)
+ {
+ m.lock();
+ break;
+ }
+ this_thread::yield();
+ }
+}
+
+void
+__sp_mut::unlock() _NOEXCEPT
+{
+ static_cast<mutex*>(__lx)->unlock();
+}
+
+__sp_mut&
+__get_sp_mut(const void* p)
+{
+ static __sp_mut muts[__sp_mut_count]
+ {
+ &mut_back[ 0], &mut_back[ 1], &mut_back[ 2], &mut_back[ 3],
+ &mut_back[ 4], &mut_back[ 5], &mut_back[ 6], &mut_back[ 7],
+ &mut_back[ 8], &mut_back[ 9], &mut_back[10], &mut_back[11],
+ &mut_back[12], &mut_back[13], &mut_back[14], &mut_back[15]
+ };
+ return muts[hash<const void*>()(p) & (__sp_mut_count-1)];
+}
+
+#endif // __has_feature(cxx_atomic)
+
void
declare_reachable(void*)
{
@@ -154,7 +209,7 @@ align(size_t alignment, size_t size, void*& ptr, size_t& space)
{
char* p1 = static_cast<char*>(ptr);
char* p2 = (char*)((size_t)(p1 + (alignment - 1)) & -alignment);
- ptrdiff_t d = p2 - p1;
+ size_t d = static_cast<size_t>(p2 - p1);
if (d <= space - size)
{
r = p2;
diff --git a/system/lib/libcxx/mutex.cpp b/system/lib/libcxx/mutex.cpp
index 16817198..42195aa8 100644
--- a/system/lib/libcxx/mutex.cpp
+++ b/system/lib/libcxx/mutex.cpp
@@ -7,6 +7,7 @@
//
//===----------------------------------------------------------------------===//
+#define _LIBCPP_BUILDING_MUTEX
#include "mutex"
#include "limits"
#include "system_error"
@@ -20,8 +21,7 @@ const adopt_lock_t adopt_lock = {};
mutex::~mutex()
{
- int e = pthread_mutex_destroy(&__m_);
-// assert(e == 0);
+ pthread_mutex_destroy(&__m_);
}
void
@@ -33,13 +33,13 @@ mutex::lock()
}
bool
-mutex::try_lock()
+mutex::try_lock() _NOEXCEPT
{
return pthread_mutex_trylock(&__m_) == 0;
}
void
-mutex::unlock()
+mutex::unlock() _NOEXCEPT
{
int ec = pthread_mutex_unlock(&__m_);
assert(ec == 0);
@@ -91,14 +91,14 @@ recursive_mutex::lock()
}
void
-recursive_mutex::unlock()
+recursive_mutex::unlock() _NOEXCEPT
{
int e = pthread_mutex_unlock(&__m_);
assert(e == 0);
}
bool
-recursive_mutex::try_lock()
+recursive_mutex::try_lock() _NOEXCEPT
{
return pthread_mutex_trylock(&__m_) == 0;
}
@@ -125,7 +125,7 @@ timed_mutex::lock()
}
bool
-timed_mutex::try_lock()
+timed_mutex::try_lock() _NOEXCEPT
{
unique_lock<mutex> lk(__m_, try_to_lock);
if (lk.owns_lock() && !__locked_)
@@ -137,7 +137,7 @@ timed_mutex::try_lock()
}
void
-timed_mutex::unlock()
+timed_mutex::unlock() _NOEXCEPT
{
lock_guard<mutex> _(__m_);
__locked_ = false;
@@ -176,7 +176,7 @@ recursive_timed_mutex::lock()
}
bool
-recursive_timed_mutex::try_lock()
+recursive_timed_mutex::try_lock() _NOEXCEPT
{
pthread_t id = pthread_self();
unique_lock<mutex> lk(__m_, try_to_lock);
@@ -192,7 +192,7 @@ recursive_timed_mutex::try_lock()
}
void
-recursive_timed_mutex::unlock()
+recursive_timed_mutex::unlock() _NOEXCEPT
{
unique_lock<mutex> lk(__m_);
if (--__count_ == 0)
diff --git a/system/lib/libcxx/new.cpp b/system/lib/libcxx/new.cpp
index 1e8ed88d..b23a516f 100644
--- a/system/lib/libcxx/new.cpp
+++ b/system/lib/libcxx/new.cpp
@@ -11,14 +11,26 @@
#include "new"
-#if __APPLE__
+#ifndef __has_include
+#define __has_include(inc) 0
+#endif
+
+#ifdef __APPLE__
#include <cxxabi.h>
- // On Darwin, there are two STL shared libraries and a lower level ABI
- // shared libray. The global holding the current new handler is
- // in the ABI library and named __cxa_new_handler.
- #define __new_handler __cxxabiapple::__cxa_new_handler
+
+ #ifndef _LIBCPPABI_VERSION
+ // On Darwin, there are two STL shared libraries and a lower level ABI
+ // shared libray. The global holding the current new handler is
+ // in the ABI library and named __cxa_new_handler.
+ #define __new_handler __cxxabiapple::__cxa_new_handler
+ #endif
#else // __APPLE__
- static std::new_handler __new_handler;
+ #if defined(LIBCXXRT) || __has_include(<cxxabi.h>)
+ #include <cxxabi.h>
+ #endif // __has_include(<cxxabi.h>)
+ #ifndef _LIBCPPABI_VERSION
+ static std::new_handler __new_handler;
+ #endif // _LIBCPPABI_VERSION
#endif
// Implement all new and delete operators as weak definitions
@@ -83,7 +95,7 @@ operator new[](size_t size)
__attribute__((__weak__, __visibility__("default")))
void*
-operator new[](size_t size, const std::nothrow_t& nothrow) _NOEXCEPT
+operator new[](size_t size, const std::nothrow_t&) _NOEXCEPT
{
void* p = 0;
#ifndef _LIBCPP_NO_EXCEPTIONS
@@ -134,6 +146,8 @@ namespace std
const nothrow_t nothrow = {};
+#ifndef _LIBCPPABI_VERSION
+
new_handler
set_new_handler(new_handler handler) _NOEXCEPT
{
@@ -146,6 +160,8 @@ get_new_handler() _NOEXCEPT
return __sync_fetch_and_add(&__new_handler, (new_handler)0);
}
+#ifndef LIBCXXRT
+
bad_alloc::bad_alloc() _NOEXCEPT
{
}
@@ -160,6 +176,8 @@ bad_alloc::what() const _NOEXCEPT
return "std::bad_alloc";
}
+#endif //LIBCXXRT
+
bad_array_new_length::bad_array_new_length() _NOEXCEPT
{
}
@@ -174,6 +192,8 @@ bad_array_new_length::what() const _NOEXCEPT
return "bad_array_new_length";
}
+#endif
+
void
__throw_bad_alloc()
{
diff --git a/system/lib/libcxx/random.cpp b/system/lib/libcxx/random.cpp
index eca97bc8..97a40c50 100644
--- a/system/lib/libcxx/random.cpp
+++ b/system/lib/libcxx/random.cpp
@@ -10,6 +10,9 @@
#include "random"
#include "system_error"
+#ifdef __sun__
+#define rename solaris_headers_are_broken
+#endif
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
@@ -37,7 +40,7 @@ random_device::operator()()
}
double
-random_device::entropy() const
+random_device::entropy() const _NOEXCEPT
{
return 0;
}
diff --git a/system/lib/libcxx/readme.txt b/system/lib/libcxx/readme.txt
index c7e41df9..97d8db86 100644
--- a/system/lib/libcxx/readme.txt
+++ b/system/lib/libcxx/readme.txt
@@ -1 +1 @@
-These files are from libc++, svn revision 140465, Sep 24 2011
+These files are from libc++, svn revision 178253, Mar 29 2013
diff --git a/system/lib/libcxx/regex.cpp b/system/lib/libcxx/regex.cpp
index 65e9f886..e3ec2810 100644
--- a/system/lib/libcxx/regex.cpp
+++ b/system/lib/libcxx/regex.cpp
@@ -69,12 +69,17 @@ regex_error::~regex_error() throw() {}
namespace {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wpadded"
+
struct collationnames
{
const char* elem_;
char char_;
};
+#pragma clang diagnostic pop
+
const collationnames collatenames[] =
{
{"A", 0x41},
@@ -190,12 +195,17 @@ const collationnames collatenames[] =
{"zero", 0x30}
};
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wpadded"
+
struct classnames
{
const char* elem_;
ctype_base::mask mask_;
};
+#pragma clang diagnostic pop
+
const classnames ClassNames[] =
{
{"alnum", ctype_base::alnum},
diff --git a/system/lib/libcxx/stdexcept.cpp b/system/lib/libcxx/stdexcept.cpp
index 28917887..0c4e8323 100644
--- a/system/lib/libcxx/stdexcept.cpp
+++ b/system/lib/libcxx/stdexcept.cpp
@@ -16,6 +16,16 @@
#include <cstddef>
#include "system_error"
+#ifndef __has_include
+#define __has_include(inc) 0
+#endif
+
+#ifdef __APPLE__
+#include <cxxabi.h>
+#elif defined(LIBCXXRT) || __has_include(<cxxabi.h>)
+#include <cxxabi.h>
+#endif
+
// Note: optimize for size
#pragma GCC visibility push(hidden)
@@ -29,7 +39,7 @@ private:
const char* str_;
typedef std::size_t unused_t;
- typedef std::int32_t count_t;
+ typedef std::ptrdiff_t count_t;
static const std::ptrdiff_t offset = static_cast<std::ptrdiff_t>(2*sizeof(unused_t) +
sizeof(count_t));
@@ -67,7 +77,7 @@ __libcpp_nmstr::operator=(const __libcpp_nmstr& s)
const char* p = str_;
str_ = s.str_;
__sync_add_and_fetch(&count(), 1);
- if (__sync_add_and_fetch((count_t*)(p-sizeof(count_t)), -1) < 0)
+ if (__sync_add_and_fetch((count_t*)(p-sizeof(count_t)), count_t(-1)) < 0)
delete [] (p-offset);
return *this;
}
@@ -75,7 +85,7 @@ __libcpp_nmstr::operator=(const __libcpp_nmstr& s)
inline
__libcpp_nmstr::~__libcpp_nmstr()
{
- if (__sync_add_and_fetch(&count(), -1) < 0)
+ if (__sync_add_and_fetch(&count(), count_t(-1)) < 0)
delete [] (str_ - offset);
}
@@ -113,6 +123,8 @@ logic_error::operator=(const logic_error& le) _NOEXCEPT
return *this;
}
+#ifndef _LIBCPPABI_VERSION
+
logic_error::~logic_error() _NOEXCEPT
{
__libcpp_nmstr& s = (__libcpp_nmstr&)__imp_;
@@ -126,6 +138,8 @@ logic_error::what() const _NOEXCEPT
return s.c_str();
}
+#endif
+
runtime_error::runtime_error(const string& msg)
{
__libcpp_nmstr& s = (__libcpp_nmstr&)__imp_;
@@ -153,6 +167,8 @@ runtime_error::operator=(const runtime_error& le) _NOEXCEPT
return *this;
}
+#ifndef _LIBCPPABI_VERSION
+
runtime_error::~runtime_error() _NOEXCEPT
{
__libcpp_nmstr& s = (__libcpp_nmstr&)__imp_;
@@ -175,4 +191,6 @@ range_error::~range_error() _NOEXCEPT {}
overflow_error::~overflow_error() _NOEXCEPT {}
underflow_error::~underflow_error() _NOEXCEPT {}
+#endif
+
} // std
diff --git a/system/lib/libcxx/string.cpp b/system/lib/libcxx/string.cpp
index 1f58e365..c71af4fe 100644
--- a/system/lib/libcxx/string.cpp
+++ b/system/lib/libcxx/string.cpp
@@ -11,7 +11,7 @@
#include "cstdlib"
#include "cwchar"
#include "cerrno"
-#if _WIN32
+#ifdef _WIN32
#include "support/win32/support.h"
#endif // _WIN32
@@ -31,17 +31,17 @@ stoi(const string& str, size_t* idx, int base)
{
char* ptr;
const char* const p = str.c_str();
+ typename remove_reference<decltype(errno)>::type errno_save = errno;
+ errno = 0;
long r = strtol(p, &ptr, base);
- if (r < numeric_limits<int>::min() || numeric_limits<int>::max() < r)
- ptr = const_cast<char*>(p);
- if (ptr == p)
- {
+ swap(errno, errno_save);
#ifndef _LIBCPP_NO_EXCEPTIONS
- if (r == 0)
- throw invalid_argument("stoi: no conversion");
+ if (errno_save == ERANGE || r < numeric_limits<int>::min() ||
+ numeric_limits<int>::max() < r)
throw out_of_range("stoi: out of range");
+ if (ptr == p)
+ throw invalid_argument("stoi: no conversion");
#endif // _LIBCPP_NO_EXCEPTIONS
- }
if (idx)
*idx = static_cast<size_t>(ptr - p);
return static_cast<int>(r);
@@ -52,17 +52,17 @@ stoi(const wstring& str, size_t* idx, int base)
{
wchar_t* ptr;
const wchar_t* const p = str.c_str();
+ typename remove_reference<decltype(errno)>::type errno_save = errno;
+ errno = 0;
long r = wcstol(p, &ptr, base);
- if (r < numeric_limits<int>::min() || numeric_limits<int>::max() < r)
- ptr = const_cast<wchar_t*>(p);
- if (ptr == p)
- {
+ swap(errno, errno_save);
#ifndef _LIBCPP_NO_EXCEPTIONS
- if (r == 0)
- throw invalid_argument("stoi: no conversion");
+ if (errno_save == ERANGE || r < numeric_limits<int>::min() ||
+ numeric_limits<int>::max() < r)
throw out_of_range("stoi: out of range");
+ if (ptr == p)
+ throw invalid_argument("stoi: no conversion");
#endif // _LIBCPP_NO_EXCEPTIONS
- }
if (idx)
*idx = static_cast<size_t>(ptr - p);
return static_cast<int>(r);
@@ -73,15 +73,16 @@ stol(const string& str, size_t* idx, int base)
{
char* ptr;
const char* const p = str.c_str();
+ typename remove_reference<decltype(errno)>::type errno_save = errno;
+ errno = 0;
long r = strtol(p, &ptr, base);
- if (ptr == p)
- {
+ swap(errno, errno_save);
#ifndef _LIBCPP_NO_EXCEPTIONS
- if (r == 0)
- throw invalid_argument("stol: no conversion");
+ if (errno_save == ERANGE)
throw out_of_range("stol: out of range");
+ if (ptr == p)
+ throw invalid_argument("stol: no conversion");
#endif // _LIBCPP_NO_EXCEPTIONS
- }
if (idx)
*idx = static_cast<size_t>(ptr - p);
return r;
@@ -92,15 +93,16 @@ stol(const wstring& str, size_t* idx, int base)
{
wchar_t* ptr;
const wchar_t* const p = str.c_str();
+ typename remove_reference<decltype(errno)>::type errno_save = errno;
+ errno = 0;
long r = wcstol(p, &ptr, base);
- if (ptr == p)
- {
+ swap(errno, errno_save);
#ifndef _LIBCPP_NO_EXCEPTIONS
- if (r == 0)
- throw invalid_argument("stol: no conversion");
+ if (errno_save == ERANGE)
throw out_of_range("stol: out of range");
+ if (ptr == p)
+ throw invalid_argument("stol: no conversion");
#endif // _LIBCPP_NO_EXCEPTIONS
- }
if (idx)
*idx = static_cast<size_t>(ptr - p);
return r;
@@ -111,15 +113,16 @@ stoul(const string& str, size_t* idx, int base)
{
char* ptr;
const char* const p = str.c_str();
+ typename remove_reference<decltype(errno)>::type errno_save = errno;
+ errno = 0;
unsigned long r = strtoul(p, &ptr, base);
- if (ptr == p)
- {
+ swap(errno, errno_save);
#ifndef _LIBCPP_NO_EXCEPTIONS
- if (r == 0)
- throw invalid_argument("stoul: no conversion");
+ if (errno_save == ERANGE)
throw out_of_range("stoul: out of range");
+ if (ptr == p)
+ throw invalid_argument("stoul: no conversion");
#endif // _LIBCPP_NO_EXCEPTIONS
- }
if (idx)
*idx = static_cast<size_t>(ptr - p);
return r;
@@ -130,15 +133,16 @@ stoul(const wstring& str, size_t* idx, int base)
{
wchar_t* ptr;
const wchar_t* const p = str.c_str();
+ typename remove_reference<decltype(errno)>::type errno_save = errno;
+ errno = 0;
unsigned long r = wcstoul(p, &ptr, base);
- if (ptr == p)
- {
+ swap(errno, errno_save);
#ifndef _LIBCPP_NO_EXCEPTIONS
- if (r == 0)
- throw invalid_argument("stoul: no conversion");
+ if (errno_save == ERANGE)
throw out_of_range("stoul: out of range");
+ if (ptr == p)
+ throw invalid_argument("stoul: no conversion");
#endif // _LIBCPP_NO_EXCEPTIONS
- }
if (idx)
*idx = static_cast<size_t>(ptr - p);
return r;
@@ -149,15 +153,16 @@ stoll(const string& str, size_t* idx, int base)
{
char* ptr;
const char* const p = str.c_str();
+ typename remove_reference<decltype(errno)>::type errno_save = errno;
+ errno = 0;
long long r = strtoll(p, &ptr, base);
- if (ptr == p)
- {
+ swap(errno, errno_save);
#ifndef _LIBCPP_NO_EXCEPTIONS
- if (r == 0)
- throw invalid_argument("stoll: no conversion");
+ if (errno_save == ERANGE)
throw out_of_range("stoll: out of range");
+ if (ptr == p)
+ throw invalid_argument("stoll: no conversion");
#endif // _LIBCPP_NO_EXCEPTIONS
- }
if (idx)
*idx = static_cast<size_t>(ptr - p);
return r;
@@ -168,15 +173,16 @@ stoll(const wstring& str, size_t* idx, int base)
{
wchar_t* ptr;
const wchar_t* const p = str.c_str();
+ typename remove_reference<decltype(errno)>::type errno_save = errno;
+ errno = 0;
long long r = wcstoll(p, &ptr, base);
- if (ptr == p)
- {
+ swap(errno, errno_save);
#ifndef _LIBCPP_NO_EXCEPTIONS
- if (r == 0)
- throw invalid_argument("stoll: no conversion");
+ if (errno_save == ERANGE)
throw out_of_range("stoll: out of range");
+ if (ptr == p)
+ throw invalid_argument("stoll: no conversion");
#endif // _LIBCPP_NO_EXCEPTIONS
- }
if (idx)
*idx = static_cast<size_t>(ptr - p);
return r;
@@ -187,15 +193,16 @@ stoull(const string& str, size_t* idx, int base)
{
char* ptr;
const char* const p = str.c_str();
+ typename remove_reference<decltype(errno)>::type errno_save = errno;
+ errno = 0;
unsigned long long r = strtoull(p, &ptr, base);
- if (ptr == p)
- {
+ swap(errno, errno_save);
#ifndef _LIBCPP_NO_EXCEPTIONS
- if (r == 0)
- throw invalid_argument("stoull: no conversion");
+ if (errno_save == ERANGE)
throw out_of_range("stoull: out of range");
+ if (ptr == p)
+ throw invalid_argument("stoull: no conversion");
#endif // _LIBCPP_NO_EXCEPTIONS
- }
if (idx)
*idx = static_cast<size_t>(ptr - p);
return r;
@@ -206,15 +213,16 @@ stoull(const wstring& str, size_t* idx, int base)
{
wchar_t* ptr;
const wchar_t* const p = str.c_str();
+ typename remove_reference<decltype(errno)>::type errno_save = errno;
+ errno = 0;
unsigned long long r = wcstoull(p, &ptr, base);
- if (ptr == p)
- {
+ swap(errno, errno_save);
#ifndef _LIBCPP_NO_EXCEPTIONS
- if (r == 0)
- throw invalid_argument("stoull: no conversion");
+ if (errno_save == ERANGE)
throw out_of_range("stoull: out of range");
+ if (ptr == p)
+ throw invalid_argument("stoull: no conversion");
#endif // _LIBCPP_NO_EXCEPTIONS
- }
if (idx)
*idx = static_cast<size_t>(ptr - p);
return r;
@@ -225,9 +233,9 @@ stof(const string& str, size_t* idx)
{
char* ptr;
const char* const p = str.c_str();
- int errno_save = errno;
+ typename remove_reference<decltype(errno)>::type errno_save = errno;
errno = 0;
- double r = strtod(p, &ptr);
+ float r = strtof(p, &ptr);
swap(errno, errno_save);
#ifndef _LIBCPP_NO_EXCEPTIONS
if (errno_save == ERANGE)
@@ -237,7 +245,7 @@ stof(const string& str, size_t* idx)
#endif // _LIBCPP_NO_EXCEPTIONS
if (idx)
*idx = static_cast<size_t>(ptr - p);
- return static_cast<float>(r);
+ return r;
}
float
@@ -245,9 +253,9 @@ stof(const wstring& str, size_t* idx)
{
wchar_t* ptr;
const wchar_t* const p = str.c_str();
- int errno_save = errno;
+ typename remove_reference<decltype(errno)>::type errno_save = errno;
errno = 0;
- double r = wcstod(p, &ptr);
+ float r = wcstof(p, &ptr);
swap(errno, errno_save);
#ifndef _LIBCPP_NO_EXCEPTIONS
if (errno_save == ERANGE)
@@ -257,7 +265,7 @@ stof(const wstring& str, size_t* idx)
#endif // _LIBCPP_NO_EXCEPTIONS
if (idx)
*idx = static_cast<size_t>(ptr - p);
- return static_cast<float>(r);
+ return r;
}
double
@@ -265,7 +273,7 @@ stod(const string& str, size_t* idx)
{
char* ptr;
const char* const p = str.c_str();
- int errno_save = errno;
+ typename remove_reference<decltype(errno)>::type errno_save = errno;
errno = 0;
double r = strtod(p, &ptr);
swap(errno, errno_save);
@@ -285,7 +293,7 @@ stod(const wstring& str, size_t* idx)
{
wchar_t* ptr;
const wchar_t* const p = str.c_str();
- int errno_save = errno;
+ typename remove_reference<decltype(errno)>::type errno_save = errno;
errno = 0;
double r = wcstod(p, &ptr);
swap(errno, errno_save);
@@ -305,7 +313,7 @@ stold(const string& str, size_t* idx)
{
char* ptr;
const char* const p = str.c_str();
- int errno_save = errno;
+ typename remove_reference<decltype(errno)>::type errno_save = errno;
errno = 0;
long double r = strtold(p, &ptr);
swap(errno, errno_save);
@@ -325,7 +333,7 @@ stold(const wstring& str, size_t* idx)
{
wchar_t* ptr;
const wchar_t* const p = str.c_str();
- int errno_save = errno;
+ typename remove_reference<decltype(errno)>::type errno_save = errno;
errno = 0;
long double r = wcstold(p, &ptr);
swap(errno, errno_save);
@@ -346,7 +354,7 @@ string to_string(int val)
s.resize(s.capacity());
while (true)
{
- int n2 = snprintf(&s[0], s.size()+1, "%d", val);
+ size_t n2 = static_cast<size_t>(snprintf(&s[0], s.size()+1, "%d", val));
if (n2 <= s.size())
{
s.resize(n2);
@@ -363,7 +371,7 @@ string to_string(unsigned val)
s.resize(s.capacity());
while (true)
{
- int n2 = snprintf(&s[0], s.size()+1, "%u", val);
+ size_t n2 = static_cast<size_t>(snprintf(&s[0], s.size()+1, "%u", val));
if (n2 <= s.size())
{
s.resize(n2);
@@ -380,7 +388,7 @@ string to_string(long val)
s.resize(s.capacity());
while (true)
{
- int n2 = snprintf(&s[0], s.size()+1, "%ld", val);
+ size_t n2 = static_cast<size_t>(snprintf(&s[0], s.size()+1, "%ld", val));
if (n2 <= s.size())
{
s.resize(n2);
@@ -397,7 +405,7 @@ string to_string(unsigned long val)
s.resize(s.capacity());
while (true)
{
- int n2 = snprintf(&s[0], s.size()+1, "%lu", val);
+ size_t n2 = static_cast<size_t>(snprintf(&s[0], s.size()+1, "%lu", val));
if (n2 <= s.size())
{
s.resize(n2);
@@ -414,7 +422,7 @@ string to_string(long long val)
s.resize(s.capacity());
while (true)
{
- int n2 = snprintf(&s[0], s.size()+1, "%lld", val);
+ size_t n2 = static_cast<size_t>(snprintf(&s[0], s.size()+1, "%lld", val));
if (n2 <= s.size())
{
s.resize(n2);
@@ -431,7 +439,7 @@ string to_string(unsigned long long val)
s.resize(s.capacity());
while (true)
{
- int n2 = snprintf(&s[0], s.size()+1, "%llu", val);
+ size_t n2 = static_cast<size_t>(snprintf(&s[0], s.size()+1, "%llu", val));
if (n2 <= s.size())
{
s.resize(n2);
@@ -448,7 +456,7 @@ string to_string(float val)
s.resize(s.capacity());
while (true)
{
- int n2 = snprintf(&s[0], s.size()+1, "%f", val);
+ size_t n2 = static_cast<size_t>(snprintf(&s[0], s.size()+1, "%f", val));
if (n2 <= s.size())
{
s.resize(n2);
@@ -465,7 +473,7 @@ string to_string(double val)
s.resize(s.capacity());
while (true)
{
- int n2 = snprintf(&s[0], s.size()+1, "%f", val);
+ size_t n2 = static_cast<size_t>(snprintf(&s[0], s.size()+1, "%f", val));
if (n2 <= s.size())
{
s.resize(n2);
@@ -482,7 +490,7 @@ string to_string(long double val)
s.resize(s.capacity());
while (true)
{
- int n2 = snprintf(&s[0], s.size()+1, "%Lf", val);
+ size_t n2 = static_cast<size_t>(snprintf(&s[0], s.size()+1, "%Lf", val));
if (n2 <= s.size())
{
s.resize(n2);
@@ -505,7 +513,7 @@ wstring to_wstring(int val)
int n2 = swprintf(&s[0], s.size()+1, L"%d", val);
if (n2 > 0)
{
- s.resize(n2);
+ s.resize(static_cast<size_t>(n2));
break;
}
s.resize(2*s.size());
@@ -526,7 +534,7 @@ wstring to_wstring(unsigned val)
int n2 = swprintf(&s[0], s.size()+1, L"%u", val);
if (n2 > 0)
{
- s.resize(n2);
+ s.resize(static_cast<size_t>(n2));
break;
}
s.resize(2*s.size());
@@ -547,7 +555,7 @@ wstring to_wstring(long val)
int n2 = swprintf(&s[0], s.size()+1, L"%ld", val);
if (n2 > 0)
{
- s.resize(n2);
+ s.resize(static_cast<size_t>(n2));
break;
}
s.resize(2*s.size());
@@ -568,7 +576,7 @@ wstring to_wstring(unsigned long val)
int n2 = swprintf(&s[0], s.size()+1, L"%lu", val);
if (n2 > 0)
{
- s.resize(n2);
+ s.resize(static_cast<size_t>(n2));
break;
}
s.resize(2*s.size());
@@ -589,7 +597,7 @@ wstring to_wstring(long long val)
int n2 = swprintf(&s[0], s.size()+1, L"%lld", val);
if (n2 > 0)
{
- s.resize(n2);
+ s.resize(static_cast<size_t>(n2));
break;
}
s.resize(2*s.size());
@@ -610,7 +618,7 @@ wstring to_wstring(unsigned long long val)
int n2 = swprintf(&s[0], s.size()+1, L"%llu", val);
if (n2 > 0)
{
- s.resize(n2);
+ s.resize(static_cast<size_t>(n2));
break;
}
s.resize(2*s.size());
@@ -629,7 +637,7 @@ wstring to_wstring(float val)
int n2 = swprintf(&s[0], s.size()+1, L"%f", val);
if (n2 > 0)
{
- s.resize(n2);
+ s.resize(static_cast<size_t>(n2));
break;
}
s.resize(2*s.size());
@@ -648,7 +656,7 @@ wstring to_wstring(double val)
int n2 = swprintf(&s[0], s.size()+1, L"%f", val);
if (n2 > 0)
{
- s.resize(n2);
+ s.resize(static_cast<size_t>(n2));
break;
}
s.resize(2*s.size());
@@ -667,7 +675,7 @@ wstring to_wstring(long double val)
int n2 = swprintf(&s[0], s.size()+1, L"%Lf", val);
if (n2 > 0)
{
- s.resize(n2);
+ s.resize(static_cast<size_t>(n2));
break;
}
s.resize(2*s.size());
diff --git a/system/lib/libcxx/strstream.cpp b/system/lib/libcxx/strstream.cpp
index 53139509..518422bd 100644
--- a/system/lib/libcxx/strstream.cpp
+++ b/system/lib/libcxx/strstream.cpp
@@ -34,7 +34,7 @@ void
strstreambuf::__init(char* __gnext, streamsize __n, char* __pbeg)
{
if (__n == 0)
- __n = strlen(__gnext);
+ __n = static_cast<streamsize>(strlen(__gnext));
else if (__n < 0)
__n = INT_MAX;
if (__pbeg == nullptr)
@@ -158,14 +158,16 @@ strstreambuf::overflow(int_type __c)
return int_type(EOF);
streamsize old_size = (epptr() ? epptr() : egptr()) - eback();
streamsize new_size = max<streamsize>(__alsize_, 2*old_size);
+ if (new_size == 0)
+ new_size = __default_alsize;
char* buf = nullptr;
if (__palloc_)
- buf = static_cast<char*>(__palloc_(new_size));
+ buf = static_cast<char*>(__palloc_(static_cast<size_t>(new_size)));
else
buf = new char[new_size];
if (buf == nullptr)
return int_type(EOF);
- memcpy(buf, eback(), old_size);
+ memcpy(buf, eback(), static_cast<size_t>(old_size));
ptrdiff_t ninp = gptr() - eback();
ptrdiff_t einp = egptr() - eback();
ptrdiff_t nout = pptr() - pbase();
@@ -179,7 +181,7 @@ strstreambuf::overflow(int_type __c)
}
setg(buf, buf + ninp, buf + einp);
setp(buf + einp, buf + einp + eout);
- pbump(nout);
+ pbump(static_cast<int>(nout));
__strmode_ |= __allocated;
}
*pptr() = static_cast<char>(__c);
diff --git a/system/lib/libcxx/support/solaris/README b/system/lib/libcxx/support/solaris/README
new file mode 100644
index 00000000..89c887a3
--- /dev/null
+++ b/system/lib/libcxx/support/solaris/README
@@ -0,0 +1,4 @@
+This directory contains a partial implementation of the xlocale APIs for
+Solaris. Some portions are lifted from FreeBSD libc, and so are covered by a
+2-clause BSD license instead of the MIT/UUIC license that the rest of libc++ is
+distributed under.
diff --git a/system/lib/libcxx/support/solaris/mbsnrtowcs.inc b/system/lib/libcxx/support/solaris/mbsnrtowcs.inc
new file mode 100644
index 00000000..07404527
--- /dev/null
+++ b/system/lib/libcxx/support/solaris/mbsnrtowcs.inc
@@ -0,0 +1,76 @@
+
+
+/*-
+ * As noted in the source, some portions of this implementation are copied from
+ * FreeBSD libc. These are covered by the following copyright:
+ *
+ * Copyright (c) 2002-2004 Tim J. Robbins.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+size_t
+mbsnrtowcs_l(wchar_t * __restrict dst, const char ** __restrict src,
+ size_t nms, size_t len, mbstate_t * __restrict ps, locale_t loc)
+{
+ const char *s;
+ size_t nchr;
+ wchar_t wc;
+ size_t nb;
+ FIX_LOCALE(loc);
+
+ s = *src;
+ nchr = 0;
+
+ if (dst == NULL) {
+ for (;;) {
+ if ((nb = mbrtowc_l(&wc, s, nms, ps, loc)) == (size_t)-1)
+ /* Invalid sequence - mbrtowc() sets errno. */
+ return ((size_t)-1);
+ else if (nb == 0 || nb == (size_t)-2)
+ return (nchr);
+ s += nb;
+ nms -= nb;
+ nchr++;
+ }
+ /*NOTREACHED*/
+ }
+
+ while (len-- > 0) {
+ if ((nb = mbrtowc_l(dst, s, nms, ps, loc)) == (size_t)-1) {
+ *src = s;
+ return ((size_t)-1);
+ } else if (nb == (size_t)-2) {
+ *src = s + nms;
+ return (nchr);
+ } else if (nb == 0) {
+ *src = NULL;
+ return (nchr);
+ }
+ s += nb;
+ nms -= nb;
+ nchr++;
+ dst++;
+ }
+ *src = s;
+ return (nchr);
+}
diff --git a/system/lib/libcxx/support/solaris/wcsnrtombs.inc b/system/lib/libcxx/support/solaris/wcsnrtombs.inc
new file mode 100644
index 00000000..67e7078f
--- /dev/null
+++ b/system/lib/libcxx/support/solaris/wcsnrtombs.inc
@@ -0,0 +1,93 @@
+/*-
+ * Copyright (c) 2002-2004 Tim J. Robbins.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+
+size_t
+wcsnrtombs_l(char * __restrict dst, const wchar_t ** __restrict src,
+ size_t nwc, size_t len, mbstate_t * __restrict ps, locale_t loc)
+{
+ FIX_LOCALE(loc);
+ mbstate_t mbsbak;
+ char buf[MB_CUR_MAX_L(loc)];
+ const wchar_t *s;
+ size_t nbytes;
+ size_t nb;
+
+ s = *src;
+ nbytes = 0;
+
+ if (dst == NULL) {
+ while (nwc-- > 0) {
+ if ((nb = wcrtomb_l(buf, *s, ps, loc)) == (size_t)-1)
+ /* Invalid character - wcrtomb() sets errno. */
+ return ((size_t)-1);
+ else if (*s == L'\0')
+ return (nbytes + nb - 1);
+ s++;
+ nbytes += nb;
+ }
+ return (nbytes);
+ }
+
+ while (len > 0 && nwc-- > 0) {
+ if (len > (size_t)MB_CUR_MAX_L(loc)) {
+ /* Enough space to translate in-place. */
+ if ((nb = wcrtomb_l(dst, *s, ps, loc)) == (size_t)-1) {
+ *src = s;
+ return ((size_t)-1);
+ }
+ } else {
+ /*
+ * May not be enough space; use temp. buffer.
+ *
+ * We need to save a copy of the conversion state
+ * here so we can restore it if the multibyte
+ * character is too long for the buffer.
+ */
+ mbsbak = *ps;
+ if ((nb = wcrtomb_l(buf, *s, ps, loc)) == (size_t)-1) {
+ *src = s;
+ return ((size_t)-1);
+ }
+ if (nb > (int)len) {
+ /* MB sequence for character won't fit. */
+ *ps = mbsbak;
+ break;
+ }
+ memcpy(dst, buf, nb);
+ }
+ if (*s == L'\0') {
+ *src = NULL;
+ return (nbytes + nb - 1);
+ }
+ s++;
+ dst += nb;
+ len -= nb;
+ nbytes += nb;
+ }
+ *src = s;
+ return (nbytes);
+}
+
diff --git a/system/lib/libcxx/support/solaris/xlocale.c b/system/lib/libcxx/support/solaris/xlocale.c
new file mode 100644
index 00000000..a2c1fa90
--- /dev/null
+++ b/system/lib/libcxx/support/solaris/xlocale.c
@@ -0,0 +1,245 @@
+
+#ifdef __sun__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <locale.h>
+#include <limits.h>
+#include <assert.h>
+#include <sys/localedef.h>
+#include "xlocale.h"
+
+static _LC_locale_t *__C_locale;
+
+#define FIX_LOCALE(l) l = (l == 0) ? __C_locale : l
+
+#include "mbsnrtowcs.inc"
+#include "wcsnrtombs.inc"
+
+size_t __mb_cur_max(locale_t __l) {
+ FIX_LOCALE(__l);
+ return (__l->lc_ctype->cmapp->cm_mb_cur_max);
+}
+
+wint_t btowc_l(int __c, locale_t __l) {
+ FIX_LOCALE(__l);
+ return __l->lc_ctype->cmapp->core.user_api->btowc(__l->lc_ctype->cmapp, __c);
+}
+
+int wctob_l(wint_t __c, locale_t __l) {
+ FIX_LOCALE(__l);
+ return __l->lc_ctype->cmapp->core.user_api->wctob(__l->lc_ctype->cmapp, __c);
+}
+
+size_t wcrtomb_l(char *__s, wchar_t __wc, mbstate_t *__ps, locale_t __l) {
+ FIX_LOCALE(__l);
+ return __l->lc_ctype->cmapp->core.user_api->wcrtomb(__l->lc_ctype->cmapp,
+ __s, __wc, __ps);
+}
+
+size_t mbrtowc_l(wchar_t *__pwc, const char *__s, size_t __n,
+ mbstate_t *__ps, locale_t __l) {
+ FIX_LOCALE(__l);
+ return __l->lc_ctype->cmapp->core.user_api->mbrtowc(__l->lc_ctype->cmapp,
+ __pwc, __s, __n, __ps);
+}
+
+int mbtowc_l(wchar_t *__pwc, const char *__pmb, size_t __max, locale_t __l) {
+ FIX_LOCALE(__l);
+ return __l->lc_ctype->cmapp->core.user_api->mbtowc(__l->lc_ctype->cmapp,
+ __pwc, __pmb, __max);
+}
+
+size_t mbrlen_l(const char *__s, size_t __n, mbstate_t *__ps, locale_t __l) {
+ FIX_LOCALE(__l);
+ return __l->lc_ctype->cmapp->core.user_api->mbrlen(__l->lc_ctype->cmapp, __s,
+ __n, __ps);
+}
+
+struct lconv *localeconv_l(locale_t __l) {
+ FIX_LOCALE(__l);
+ return __l->core.user_api->localeconv(__l);
+}
+
+size_t mbsrtowcs_l(wchar_t *__dest, const char **__src, size_t __len,
+ mbstate_t *__ps, locale_t __l) {
+ FIX_LOCALE(__l);
+ return __l->lc_ctype->cmapp->core.user_api->mbsrtowcs(__l->lc_ctype->cmapp,
+ __dest, __src, __len, __ps);
+}
+
+int wcscoll_l(const wchar_t *__s1, const wchar_t *__s2, locale_t __l) {
+ FIX_LOCALE(__l);
+ return __l->lc_collate->core.user_api->wcscoll(__l->lc_collate,
+ __s1, __s2);
+}
+
+int strcoll_l(const char *__s1, const char *__s2, locale_t __l) {
+ FIX_LOCALE(__l);
+ return __l->lc_collate->core.user_api->strcoll(__l->lc_collate,
+ __s1, __s2);
+}
+
+size_t strxfrm_l(char *__s1, const char *__s2, size_t __n, locale_t __l) {
+ FIX_LOCALE(__l);
+ return __l->lc_collate->core.user_api->strxfrm(__l->lc_collate,
+ __s1, __s2, __n);
+}
+size_t strftime_l(char *__s, size_t __size, const char *__fmt, const struct tm
+ *__tm, locale_t __l) {
+ FIX_LOCALE(__l);
+ return __l->lc_time->core.user_api->strftime(__l->lc_time,
+ __s, __size, __fmt, __tm);
+}
+
+size_t wcsxfrm_l(wchar_t *__ws1, const wchar_t *__ws2, size_t __n,
+ locale_t __l) {
+ FIX_LOCALE(__l);
+ return __l->lc_collate->core.user_api->wcsxfrm(__l->lc_collate,
+ __ws1, __ws2, __n);
+}
+
+#define LOCALE_ISCTYPE(ctype, m) \
+ int is##ctype##_l(int __c, locale_t __l) { \
+ if ((__c < 0) || (__c > 255)) return 0;\
+ FIX_LOCALE(__l);\
+ return __l->lc_ctype->mask[__c] & m;\
+ }\
+ int isw##ctype##_l(wchar_t __c, locale_t __l) { \
+ FIX_LOCALE(__l);\
+ return __l->lc_ctype->core.user_api->iswctype(__l->lc_ctype, __c, m);\
+ }
+
+LOCALE_ISCTYPE(alnum, _ISALNUM)
+LOCALE_ISCTYPE(alpha, _ISALPHA)
+LOCALE_ISCTYPE(blank, _ISALPHA)
+LOCALE_ISCTYPE(cntrl, _ISCNTRL)
+LOCALE_ISCTYPE(digit, _ISDIGIT)
+LOCALE_ISCTYPE(graph, _ISGRAPH)
+LOCALE_ISCTYPE(lower, _ISLOWER)
+LOCALE_ISCTYPE(print, _ISPRINT)
+LOCALE_ISCTYPE(punct, _ISPUNCT)
+LOCALE_ISCTYPE(space, _ISSPACE)
+LOCALE_ISCTYPE(upper, _ISUPPER)
+LOCALE_ISCTYPE(xdigit, _ISXDIGIT)
+
+int iswctype_l(wint_t __c, wctype_t __m, locale_t __l) {
+ FIX_LOCALE(__l);\
+ return __l->lc_ctype->core.user_api->iswctype(__l->lc_ctype, __c, __m);\
+}
+
+int toupper_l(int __c, locale_t __l) {
+ FIX_LOCALE(__l);
+ if ((__c < 0) || (__c > __l->lc_ctype->max_upper)) return __c;
+ return __l->lc_ctype->upper[__c];
+}
+int tolower_l(int __c, locale_t __l) {
+ FIX_LOCALE(__l);
+ if ((__c < 0) || (__c > __l->lc_ctype->max_lower)) return __c;
+ return __l->lc_ctype->lower[__c];
+}
+wint_t towupper_l(wint_t __c, locale_t __l) {
+ FIX_LOCALE(__l);
+ return __l->lc_ctype->core.user_api->towupper(__l->lc_ctype, __c);
+}
+wint_t towlower_l(wint_t __c, locale_t __l) {
+ FIX_LOCALE(__l);
+ return __l->lc_ctype->core.user_api->towlower(__l->lc_ctype, __c);
+}
+
+// FIXME: This disregards the locale, which is Very Wrong
+#define vsnprintf_l(__s, __n, __l, __format, __va) \
+ vsnprintf(__s, __n, __format, __va)
+
+int sprintf_l(char *__s, locale_t __l, const char *__format, ...) {
+ va_list __va;
+ va_start(__va, __format);
+ int __res = vsnprintf_l(__s, SIZE_MAX, __l, __format, __va);
+ va_end(__va);
+ return __res;
+}
+
+int snprintf_l(char *__s, size_t __n, locale_t __l, const char *__format, ...)
+{
+ va_list __va;
+ va_start(__va, __format);
+ int __res = vsnprintf_l(__s, __n , __l, __format, __va);
+ va_end(__va);
+ return __res;
+}
+
+int asprintf_l(char **__s, locale_t __l, const char *__format, ...) {
+ va_list __va;
+ va_start(__va, __format);
+ // FIXME:
+ int __res = vasprintf(__s, __format, __va);
+ va_end(__va);
+ return __res;
+}
+
+int sscanf_l(const char *__s, locale_t __l, const char *__format, ...) {
+ va_list __va;
+ va_start(__va, __format);
+ // FIXME:
+ int __res = vsscanf(__s, __format, __va);
+ va_end(__va);
+ return __res;
+}
+
+locale_t newlocale(int mask, const char *locale, locale_t base) {
+
+ if ((locale == NULL) || (locale[0] == '\0') ||
+ ((locale[0] == 'C') && (locale[1] == '\0')))
+ {
+ return __C_locale;
+ }
+
+ // Solaris locales are shared libraries that contain
+ char *path;
+#ifdef __LP64
+ asprintf(&path, "/usr/lib/locale/%1$s/amd64/%1$s.so.3", locale);
+#else
+ asprintf(&path, "/usr/lib/locale/%1$s/%1$s.so.3", locale);
+#endif
+ void *handle = dlopen(path, RTLD_LOCAL | RTLD_NOW);
+ free(path);
+ if (!handle)
+ return 0;
+ _LC_locale_t *(*init)() = dlsym(handle, "instantiate");
+ if (!init)
+ return 0;
+ _LC_locale_t *p = init();
+ if (!p)
+ return 0;
+
+ if (!base)
+ base = __C_locale;
+
+ locale_t ret = calloc(1, sizeof(struct _LC_locale_t));
+ memcpy(ret, p, sizeof (_LC_locale_t));
+ ret->lc_collate = (mask & LC_COLLATE_MASK) ? p->lc_collate : base->lc_collate;
+ ret->lc_ctype = (mask & LC_CTYPE_MASK) ? p->lc_ctype : base->lc_ctype;
+ ret->lc_messages = (mask & LC_MESSAGES_MASK) ? p->lc_messages : base->lc_messages;
+ ret->lc_monetary = (mask & LC_MONETARY_MASK) ? p->lc_monetary : base->lc_monetary;
+ ret->lc_time = (mask & LC_TIME_MASK) ? p->lc_time : base->lc_time;
+ return ret;
+}
+
+void freelocale(locale_t loc)
+{
+ if (loc != __C_locale)
+ free(loc);
+}
+
+__attribute__((constructor))
+static void setupCLocale(void) {
+ // The default initial locale is the C locale. This is a statically
+ // allocated locale inside libc. At program start, __lc_locale will point to
+ // this. We need to grab a copy because it's not a public symbol. If we had
+ // access to the source code for libc, then we'd just use it directly...
+ assert('C' == setlocale(LC_ALL, 0)[0]);
+ __C_locale = __lc_locale;
+}
+#endif
diff --git a/system/lib/libcxx/support/win32/locale_win32.cpp b/system/lib/libcxx/support/win32/locale_win32.cpp
new file mode 100644
index 00000000..02b5874e
--- /dev/null
+++ b/system/lib/libcxx/support/win32/locale_win32.cpp
@@ -0,0 +1,94 @@
+// -*- C++ -*-
+//===-------------------- support/win32/locale_win32.cpp ------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "support/win32/locale_win32.h"
+
+#include <stdarg.h> // va_start, va_end
+
+// FIXME: base currently unused. Needs manual work to construct the new locale
+locale_t newlocale( int mask, const char * locale, locale_t /*base*/ )
+{
+ return _create_locale( mask, locale );
+}
+locale_t uselocale( locale_t newloc )
+{
+ locale_t old_locale = _get_current_locale();
+ // uselocale sets the thread's locale by definition, so unconditionally use thread-local locale
+ _configthreadlocale( _ENABLE_PER_THREAD_LOCALE );
+ // uselocale sets all categories
+ setlocale( LC_ALL, newloc->locinfo->lc_category[LC_ALL].locale );
+ // uselocale returns the old locale_t
+ return old_locale;
+}
+lconv *localeconv_l( locale_t loc )
+{
+ __locale_raii __current( uselocale(loc), uselocale );
+ return localeconv();
+}
+size_t mbrlen_l( const char *__restrict__ s, size_t n,
+ mbstate_t *__restrict__ ps, locale_t loc )
+{
+ __locale_raii __current( uselocale(loc), uselocale );
+ return mbrlen( s, n, ps );
+}
+size_t mbsrtowcs_l( wchar_t *__restrict__ dst, const char **__restrict__ src,
+ size_t len, mbstate_t *__restrict__ ps, locale_t loc )
+{
+ __locale_raii __current( uselocale(loc), uselocale );
+ return mbsrtowcs( dst, src, len, ps );
+}
+size_t wcrtomb_l( char *__restrict__ s, wchar_t wc, mbstate_t *__restrict__ ps,
+ locale_t loc )
+{
+ __locale_raii __current( uselocale(loc), uselocale );
+ return wcrtomb( s, wc, ps );
+}
+size_t mbrtowc_l( wchar_t *__restrict__ pwc, const char *__restrict__ s,
+ size_t n, mbstate_t *__restrict__ ps, locale_t loc )
+{
+ __locale_raii __current( uselocale(loc), uselocale );
+ return mbrtowc( pwc, s, n, ps );
+}
+size_t mbsnrtowcs_l( wchar_t *__restrict__ dst, const char **__restrict__ src,
+ size_t nms, size_t len, mbstate_t *__restrict__ ps, locale_t loc )
+{
+ __locale_raii __current( uselocale(loc), uselocale );
+ return mbsnrtowcs( dst, src, nms, len, ps );
+}
+size_t wcsnrtombs_l( char *__restrict__ dst, const wchar_t **__restrict__ src,
+ size_t nwc, size_t len, mbstate_t *__restrict__ ps, locale_t loc )
+{
+ __locale_raii __current( uselocale(loc), uselocale );
+ return wcsnrtombs( dst, src, nwc, len, ps );
+}
+wint_t btowc_l( int c, locale_t loc )
+{
+ __locale_raii __current( uselocale(loc), uselocale );
+ return btowc( c );
+}
+int wctob_l( wint_t c, locale_t loc )
+{
+ __locale_raii __current( uselocale(loc), uselocale );
+ return wctob( c );
+}
+
+int asprintf_l( char **ret, locale_t loc, const char *format, ... )
+{
+ va_list ap;
+ va_start( ap, format );
+ int result = vasprintf_l( ret, loc, format, ap );
+ va_end(ap);
+ return result;
+}
+int vasprintf_l( char **ret, locale_t loc, const char *format, va_list ap )
+{
+ __locale_raii __current( uselocale(loc), uselocale );
+ return vasprintf( ret, format, ap );
+}
diff --git a/system/lib/libcxx/support/win32/support.cpp b/system/lib/libcxx/support/win32/support.cpp
new file mode 100644
index 00000000..9e85077a
--- /dev/null
+++ b/system/lib/libcxx/support/win32/support.cpp
@@ -0,0 +1,70 @@
+// -*- C++ -*-
+//===----------------------- support/win32/support.h ----------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include <support/win32/support.h>
+#include <stdarg.h> // va_start, va_end
+#include <stddef.h> // size_t
+#include <stdlib.h> // malloc
+#include <stdio.h> // vsprintf, vsnprintf
+#include <string.h> // strcpy, wcsncpy
+
+int asprintf(char **sptr, const char *__restrict fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ int result = vasprintf(sptr, fmt, ap);
+ va_end(ap);
+ return result;
+}
+int vasprintf( char **sptr, const char *__restrict fmt, va_list ap )
+{
+ *sptr = NULL;
+ int count = vsnprintf( *sptr, 0, fmt, ap );
+ if( (count >= 0) && ((*sptr = (char*)malloc(count+1)) != NULL) )
+ {
+ vsprintf( *sptr, fmt, ap );
+ sptr[count] = '\0';
+ }
+
+ return count;
+}
+
+// FIXME: use wcrtomb and avoid copy
+// use mbsrtowcs which is available, first copy first nwc elements of src
+size_t mbsnrtowcs( wchar_t *__restrict dst, const char **__restrict src,
+ size_t nmc, size_t len, mbstate_t *__restrict ps )
+{
+ char* local_src = new char[nmc+1];
+ char* nmcsrc = local_src;
+ strncpy( nmcsrc, *src, nmc );
+ nmcsrc[nmc] = '\0';
+ const size_t result = mbsrtowcs( dst, const_cast<const char **>(&nmcsrc), len, ps );
+ // propagate error
+ if( nmcsrc == NULL )
+ *src = NULL;
+ delete[] local_src;
+ return result;
+}
+// FIXME: use wcrtomb and avoid copy
+// use wcsrtombs which is available, first copy first nwc elements of src
+size_t wcsnrtombs( char *__restrict dst, const wchar_t **__restrict src,
+ size_t nwc, size_t len, mbstate_t *__restrict ps )
+{
+ wchar_t* local_src = new wchar_t[nwc];
+ wchar_t* nwcsrc = local_src;
+ wcsncpy(nwcsrc, *src, nwc);
+ nwcsrc[nwc] = '\0';
+ const size_t result = wcsrtombs( dst, const_cast<const wchar_t **>(&nwcsrc), len, ps );
+ // propogate error
+ if( nwcsrc == NULL )
+ *src = NULL;
+ delete[] nwcsrc;
+ return result;
+}
diff --git a/system/lib/libcxx/symbols b/system/lib/libcxx/symbols
index 23d4a7a4..84f4ddc9 100644
--- a/system/lib/libcxx/symbols
+++ b/system/lib/libcxx/symbols
@@ -1,66 +1,3 @@
- W _ZGVNSt3__110moneypunctIcLb0EE2idE
- W _ZGVNSt3__110moneypunctIcLb1EE2idE
- W _ZGVNSt3__110moneypunctIwLb0EE2idE
- W _ZGVNSt3__110moneypunctIwLb1EE2idE
- W _ZGVNSt3__17collateIcE2idE
- W _ZGVNSt3__17collateIwE2idE
- W _ZGVNSt3__17num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE2idE
- W _ZGVNSt3__17num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE2idE
- W _ZGVNSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE2idE
- W _ZGVNSt3__17num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE2idE
- W _ZGVNSt3__18messagesIcE2idE
- W _ZGVNSt3__18messagesIwE2idE
- W _ZGVNSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE2idE
- W _ZGVNSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE2idE
- W _ZGVNSt3__18time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE2idE
- W _ZGVNSt3__18time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE2idE
- W _ZGVNSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE2idE
- W _ZGVNSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE2idE
- W _ZGVNSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE2idE
- W _ZGVNSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE2idE
- d _ZGVZNKSt3__120__time_get_c_storageIcE3__XEvE1s
- d _ZGVZNKSt3__120__time_get_c_storageIcE3__cEvE1s
- d _ZGVZNKSt3__120__time_get_c_storageIcE3__rEvE1s
- d _ZGVZNKSt3__120__time_get_c_storageIcE3__xEvE1s
- d _ZGVZNKSt3__120__time_get_c_storageIcE7__am_pmEvE5am_pm
- d _ZGVZNKSt3__120__time_get_c_storageIcE7__weeksEvE5weeks
- d _ZGVZNKSt3__120__time_get_c_storageIcE8__monthsEvE6months
- d _ZGVZNKSt3__120__time_get_c_storageIwE3__XEvE1s
- d _ZGVZNKSt3__120__time_get_c_storageIwE3__cEvE1s
- d _ZGVZNKSt3__120__time_get_c_storageIwE3__rEvE1s
- d _ZGVZNKSt3__120__time_get_c_storageIwE3__xEvE1s
- d _ZGVZNKSt3__120__time_get_c_storageIwE7__am_pmEvE5am_pm
- d _ZGVZNKSt3__120__time_get_c_storageIwE7__weeksEvE5weeks
- d _ZGVZNKSt3__120__time_get_c_storageIwE8__monthsEvE6months
- d _ZGVZNSt3__112_GLOBAL__N_13mutEvE1m
- d _ZGVZNSt3__112__rs_defaultclEvE6__rs_g
- d _ZGVZNSt3__115future_categoryEvE3__f
- d _ZGVZNSt3__115system_categoryEvE1s
- d _ZGVZNSt3__116generic_categoryEvE1s
- d _ZGVZNSt3__117iostream_categoryEvE1s
- d _ZGVZNSt3__119__thread_local_dataEvE3__p
- d _ZGVZNSt3__16__clocEvE6result
- d _ZGVZNSt3__16locale7classicEvE1c
- d _ZGVZNSt3__16locale8__globalEvE1g
- d _ZGVZNSt3__18__get_dbEvE2db
- d _ZGVZNSt3__1L10init_am_pmEvE5am_pm
- d _ZGVZNSt3__1L10init_weeksEvE5weeks
- d _ZGVZNSt3__1L11init_monthsEvE6months
- d _ZGVZNSt3__1L11init_wam_pmEvE5am_pm
- d _ZGVZNSt3__1L11init_wweeksEvE5weeks
- d _ZGVZNSt3__1L12init_wmonthsEvE6months
- d _ZL19__terminate_handler
- d _ZL20__unexpected_handler
- T _ZN12_GLOBAL__N_114__libcpp_nmstrC1EPKc
- T _ZN12_GLOBAL__N_114__libcpp_nmstrC1ERKS0_
- t _ZN12_GLOBAL__N_114__libcpp_nmstrC2EPKc
- t _ZN12_GLOBAL__N_114__libcpp_nmstrC2ERKS0_
- T _ZN12_GLOBAL__N_114__libcpp_nmstrD1Ev
- t _ZN12_GLOBAL__N_114__libcpp_nmstrD2Ev
- t _ZN12_GLOBAL__N_114__libcpp_nmstraSERKS0_
- t _ZNK12_GLOBAL__N_114__libcpp_nmstr5c_strEv
- t _ZNK12_GLOBAL__N_114__libcpp_nmstr5countEv
- T _ZNKSt10bad_typeid4whatEv
T _ZNKSt11logic_error4whatEv
T _ZNKSt13bad_exception4whatEv
T _ZNKSt13runtime_error4whatEv
@@ -148,8 +85,8 @@
T _ZNKSt3__111__libcpp_db17__dereferenceableEPKv
T _ZNKSt3__111__libcpp_db17__find_c_and_lockEPv
T _ZNKSt3__111__libcpp_db6unlockEv
+ T _ZNKSt3__111__libcpp_db8__find_cEPv
T _ZNKSt3__111__libcpp_db9__addableEPKvi
- t _ZNKSt3__112_GLOBAL__N_111__fake_bindclEv
T _ZNKSt3__112__do_message7messageEi
T _ZNKSt3__112bad_weak_ptr4whatEv
W _ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12__invariantsEv
@@ -278,14 +215,14 @@
T _ZNKSt3__112ctype_bynameIcE10do_tolowerEc
T _ZNKSt3__112ctype_bynameIcE10do_toupperEPcPKc
T _ZNKSt3__112ctype_bynameIcE10do_toupperEc
- T _ZNKSt3__112ctype_bynameIwE10do_scan_isEjPKwS3_
+ T _ZNKSt3__112ctype_bynameIwE10do_scan_isEtPKwS3_
T _ZNKSt3__112ctype_bynameIwE10do_tolowerEPwPKw
T _ZNKSt3__112ctype_bynameIwE10do_tolowerEw
T _ZNKSt3__112ctype_bynameIwE10do_toupperEPwPKw
T _ZNKSt3__112ctype_bynameIwE10do_toupperEw
- T _ZNKSt3__112ctype_bynameIwE11do_scan_notEjPKwS3_
- T _ZNKSt3__112ctype_bynameIwE5do_isEPKwS3_Pj
- T _ZNKSt3__112ctype_bynameIwE5do_isEjw
+ T _ZNKSt3__112ctype_bynameIwE11do_scan_notEtPKwS3_
+ T _ZNKSt3__112ctype_bynameIwE5do_isEPKwS3_Pt
+ T _ZNKSt3__112ctype_bynameIwE5do_isEtw
T _ZNKSt3__112ctype_bynameIwE8do_widenEPKcS3_Pw
T _ZNKSt3__112ctype_bynameIwE8do_widenEc
T _ZNKSt3__112ctype_bynameIwE9do_narrowEPKwS3_cPc
@@ -298,20 +235,20 @@
W _ZNKSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentrycvbEv
W _ZNKSt3__113basic_ostreamIwNS_11char_traitsIwEEE6sentrycvbEv
T _ZNKSt3__113random_device7entropyEv
- T _ZNKSt3__114__codecvt_utf8IjE10do_unshiftER10_mbstate_tPcS4_RS4_
- T _ZNKSt3__114__codecvt_utf8IjE11do_encodingEv
- T _ZNKSt3__114__codecvt_utf8IjE13do_max_lengthEv
- T _ZNKSt3__114__codecvt_utf8IjE16do_always_noconvEv
- T _ZNKSt3__114__codecvt_utf8IjE5do_inER10_mbstate_tPKcS5_RS5_PjS7_RS7_
- T _ZNKSt3__114__codecvt_utf8IjE6do_outER10_mbstate_tPKjS5_RS5_PcS7_RS7_
- T _ZNKSt3__114__codecvt_utf8IjE9do_lengthER10_mbstate_tPKcS5_j
- T _ZNKSt3__114__codecvt_utf8ItE10do_unshiftER10_mbstate_tPcS4_RS4_
- T _ZNKSt3__114__codecvt_utf8ItE11do_encodingEv
- T _ZNKSt3__114__codecvt_utf8ItE13do_max_lengthEv
- T _ZNKSt3__114__codecvt_utf8ItE16do_always_noconvEv
- T _ZNKSt3__114__codecvt_utf8ItE5do_inER10_mbstate_tPKcS5_RS5_PtS7_RS7_
- T _ZNKSt3__114__codecvt_utf8ItE6do_outER10_mbstate_tPKtS5_RS5_PcS7_RS7_
- T _ZNKSt3__114__codecvt_utf8ItE9do_lengthER10_mbstate_tPKcS5_j
+ T _ZNKSt3__114__codecvt_utf8IDiE10do_unshiftER10_mbstate_tPcS4_RS4_
+ T _ZNKSt3__114__codecvt_utf8IDiE11do_encodingEv
+ T _ZNKSt3__114__codecvt_utf8IDiE13do_max_lengthEv
+ T _ZNKSt3__114__codecvt_utf8IDiE16do_always_noconvEv
+ T _ZNKSt3__114__codecvt_utf8IDiE5do_inER10_mbstate_tPKcS5_RS5_PDiS7_RS7_
+ T _ZNKSt3__114__codecvt_utf8IDiE6do_outER10_mbstate_tPKDiS5_RS5_PcS7_RS7_
+ T _ZNKSt3__114__codecvt_utf8IDiE9do_lengthER10_mbstate_tPKcS5_j
+ T _ZNKSt3__114__codecvt_utf8IDsE10do_unshiftER10_mbstate_tPcS4_RS4_
+ T _ZNKSt3__114__codecvt_utf8IDsE11do_encodingEv
+ T _ZNKSt3__114__codecvt_utf8IDsE13do_max_lengthEv
+ T _ZNKSt3__114__codecvt_utf8IDsE16do_always_noconvEv
+ T _ZNKSt3__114__codecvt_utf8IDsE5do_inER10_mbstate_tPKcS5_RS5_PDsS7_RS7_
+ T _ZNKSt3__114__codecvt_utf8IDsE6do_outER10_mbstate_tPKDsS5_RS5_PcS7_RS7_
+ T _ZNKSt3__114__codecvt_utf8IDsE9do_lengthER10_mbstate_tPKcS5_j
T _ZNKSt3__114__codecvt_utf8IwE10do_unshiftER10_mbstate_tPcS4_RS4_
T _ZNKSt3__114__codecvt_utf8IwE11do_encodingEv
T _ZNKSt3__114__codecvt_utf8IwE13do_max_lengthEv
@@ -326,34 +263,34 @@
T _ZNKSt3__114error_category10equivalentERKNS_10error_codeEi
T _ZNKSt3__114error_category10equivalentEiRKNS_15error_conditionE
T _ZNKSt3__114error_category23default_error_conditionEi
- T _ZNKSt3__115__codecvt_utf16IjLb0EE10do_unshiftER10_mbstate_tPcS4_RS4_
- T _ZNKSt3__115__codecvt_utf16IjLb0EE11do_encodingEv
- T _ZNKSt3__115__codecvt_utf16IjLb0EE13do_max_lengthEv
- T _ZNKSt3__115__codecvt_utf16IjLb0EE16do_always_noconvEv
- T _ZNKSt3__115__codecvt_utf16IjLb0EE5do_inER10_mbstate_tPKcS5_RS5_PjS7_RS7_
- T _ZNKSt3__115__codecvt_utf16IjLb0EE6do_outER10_mbstate_tPKjS5_RS5_PcS7_RS7_
- T _ZNKSt3__115__codecvt_utf16IjLb0EE9do_lengthER10_mbstate_tPKcS5_j
- T _ZNKSt3__115__codecvt_utf16IjLb1EE10do_unshiftER10_mbstate_tPcS4_RS4_
- T _ZNKSt3__115__codecvt_utf16IjLb1EE11do_encodingEv
- T _ZNKSt3__115__codecvt_utf16IjLb1EE13do_max_lengthEv
- T _ZNKSt3__115__codecvt_utf16IjLb1EE16do_always_noconvEv
- T _ZNKSt3__115__codecvt_utf16IjLb1EE5do_inER10_mbstate_tPKcS5_RS5_PjS7_RS7_
- T _ZNKSt3__115__codecvt_utf16IjLb1EE6do_outER10_mbstate_tPKjS5_RS5_PcS7_RS7_
- T _ZNKSt3__115__codecvt_utf16IjLb1EE9do_lengthER10_mbstate_tPKcS5_j
- T _ZNKSt3__115__codecvt_utf16ItLb0EE10do_unshiftER10_mbstate_tPcS4_RS4_
- T _ZNKSt3__115__codecvt_utf16ItLb0EE11do_encodingEv
- T _ZNKSt3__115__codecvt_utf16ItLb0EE13do_max_lengthEv
- T _ZNKSt3__115__codecvt_utf16ItLb0EE16do_always_noconvEv
- T _ZNKSt3__115__codecvt_utf16ItLb0EE5do_inER10_mbstate_tPKcS5_RS5_PtS7_RS7_
- T _ZNKSt3__115__codecvt_utf16ItLb0EE6do_outER10_mbstate_tPKtS5_RS5_PcS7_RS7_
- T _ZNKSt3__115__codecvt_utf16ItLb0EE9do_lengthER10_mbstate_tPKcS5_j
- T _ZNKSt3__115__codecvt_utf16ItLb1EE10do_unshiftER10_mbstate_tPcS4_RS4_
- T _ZNKSt3__115__codecvt_utf16ItLb1EE11do_encodingEv
- T _ZNKSt3__115__codecvt_utf16ItLb1EE13do_max_lengthEv
- T _ZNKSt3__115__codecvt_utf16ItLb1EE16do_always_noconvEv
- T _ZNKSt3__115__codecvt_utf16ItLb1EE5do_inER10_mbstate_tPKcS5_RS5_PtS7_RS7_
- T _ZNKSt3__115__codecvt_utf16ItLb1EE6do_outER10_mbstate_tPKtS5_RS5_PcS7_RS7_
- T _ZNKSt3__115__codecvt_utf16ItLb1EE9do_lengthER10_mbstate_tPKcS5_j
+ T _ZNKSt3__115__codecvt_utf16IDiLb0EE10do_unshiftER10_mbstate_tPcS4_RS4_
+ T _ZNKSt3__115__codecvt_utf16IDiLb0EE11do_encodingEv
+ T _ZNKSt3__115__codecvt_utf16IDiLb0EE13do_max_lengthEv
+ T _ZNKSt3__115__codecvt_utf16IDiLb0EE16do_always_noconvEv
+ T _ZNKSt3__115__codecvt_utf16IDiLb0EE5do_inER10_mbstate_tPKcS5_RS5_PDiS7_RS7_
+ T _ZNKSt3__115__codecvt_utf16IDiLb0EE6do_outER10_mbstate_tPKDiS5_RS5_PcS7_RS7_
+ T _ZNKSt3__115__codecvt_utf16IDiLb0EE9do_lengthER10_mbstate_tPKcS5_j
+ T _ZNKSt3__115__codecvt_utf16IDiLb1EE10do_unshiftER10_mbstate_tPcS4_RS4_
+ T _ZNKSt3__115__codecvt_utf16IDiLb1EE11do_encodingEv
+ T _ZNKSt3__115__codecvt_utf16IDiLb1EE13do_max_lengthEv
+ T _ZNKSt3__115__codecvt_utf16IDiLb1EE16do_always_noconvEv
+ T _ZNKSt3__115__codecvt_utf16IDiLb1EE5do_inER10_mbstate_tPKcS5_RS5_PDiS7_RS7_
+ T _ZNKSt3__115__codecvt_utf16IDiLb1EE6do_outER10_mbstate_tPKDiS5_RS5_PcS7_RS7_
+ T _ZNKSt3__115__codecvt_utf16IDiLb1EE9do_lengthER10_mbstate_tPKcS5_j
+ T _ZNKSt3__115__codecvt_utf16IDsLb0EE10do_unshiftER10_mbstate_tPcS4_RS4_
+ T _ZNKSt3__115__codecvt_utf16IDsLb0EE11do_encodingEv
+ T _ZNKSt3__115__codecvt_utf16IDsLb0EE13do_max_lengthEv
+ T _ZNKSt3__115__codecvt_utf16IDsLb0EE16do_always_noconvEv
+ T _ZNKSt3__115__codecvt_utf16IDsLb0EE5do_inER10_mbstate_tPKcS5_RS5_PDsS7_RS7_
+ T _ZNKSt3__115__codecvt_utf16IDsLb0EE6do_outER10_mbstate_tPKDsS5_RS5_PcS7_RS7_
+ T _ZNKSt3__115__codecvt_utf16IDsLb0EE9do_lengthER10_mbstate_tPKcS5_j
+ T _ZNKSt3__115__codecvt_utf16IDsLb1EE10do_unshiftER10_mbstate_tPcS4_RS4_
+ T _ZNKSt3__115__codecvt_utf16IDsLb1EE11do_encodingEv
+ T _ZNKSt3__115__codecvt_utf16IDsLb1EE13do_max_lengthEv
+ T _ZNKSt3__115__codecvt_utf16IDsLb1EE16do_always_noconvEv
+ T _ZNKSt3__115__codecvt_utf16IDsLb1EE5do_inER10_mbstate_tPKcS5_RS5_PDsS7_RS7_
+ T _ZNKSt3__115__codecvt_utf16IDsLb1EE6do_outER10_mbstate_tPKDsS5_RS5_PcS7_RS7_
+ T _ZNKSt3__115__codecvt_utf16IDsLb1EE9do_lengthER10_mbstate_tPKcS5_j
T _ZNKSt3__115__codecvt_utf16IwLb0EE10do_unshiftER10_mbstate_tPcS4_RS4_
T _ZNKSt3__115__codecvt_utf16IwLb0EE11do_encodingEv
T _ZNKSt3__115__codecvt_utf16IwLb0EE13do_max_lengthEv
@@ -442,20 +379,20 @@
T _ZNKSt3__119__iostream_category4nameEv
T _ZNKSt3__119__iostream_category7messageEi
T _ZNKSt3__119__shared_weak_count13__get_deleterERKSt9type_info
- T _ZNKSt3__120__codecvt_utf8_utf16IjE10do_unshiftER10_mbstate_tPcS4_RS4_
- T _ZNKSt3__120__codecvt_utf8_utf16IjE11do_encodingEv
- T _ZNKSt3__120__codecvt_utf8_utf16IjE13do_max_lengthEv
- T _ZNKSt3__120__codecvt_utf8_utf16IjE16do_always_noconvEv
- T _ZNKSt3__120__codecvt_utf8_utf16IjE5do_inER10_mbstate_tPKcS5_RS5_PjS7_RS7_
- T _ZNKSt3__120__codecvt_utf8_utf16IjE6do_outER10_mbstate_tPKjS5_RS5_PcS7_RS7_
- T _ZNKSt3__120__codecvt_utf8_utf16IjE9do_lengthER10_mbstate_tPKcS5_j
- T _ZNKSt3__120__codecvt_utf8_utf16ItE10do_unshiftER10_mbstate_tPcS4_RS4_
- T _ZNKSt3__120__codecvt_utf8_utf16ItE11do_encodingEv
- T _ZNKSt3__120__codecvt_utf8_utf16ItE13do_max_lengthEv
- T _ZNKSt3__120__codecvt_utf8_utf16ItE16do_always_noconvEv
- T _ZNKSt3__120__codecvt_utf8_utf16ItE5do_inER10_mbstate_tPKcS5_RS5_PtS7_RS7_
- T _ZNKSt3__120__codecvt_utf8_utf16ItE6do_outER10_mbstate_tPKtS5_RS5_PcS7_RS7_
- T _ZNKSt3__120__codecvt_utf8_utf16ItE9do_lengthER10_mbstate_tPKcS5_j
+ T _ZNKSt3__120__codecvt_utf8_utf16IDiE10do_unshiftER10_mbstate_tPcS4_RS4_
+ T _ZNKSt3__120__codecvt_utf8_utf16IDiE11do_encodingEv
+ T _ZNKSt3__120__codecvt_utf8_utf16IDiE13do_max_lengthEv
+ T _ZNKSt3__120__codecvt_utf8_utf16IDiE16do_always_noconvEv
+ T _ZNKSt3__120__codecvt_utf8_utf16IDiE5do_inER10_mbstate_tPKcS5_RS5_PDiS7_RS7_
+ T _ZNKSt3__120__codecvt_utf8_utf16IDiE6do_outER10_mbstate_tPKDiS5_RS5_PcS7_RS7_
+ T _ZNKSt3__120__codecvt_utf8_utf16IDiE9do_lengthER10_mbstate_tPKcS5_j
+ T _ZNKSt3__120__codecvt_utf8_utf16IDsE10do_unshiftER10_mbstate_tPcS4_RS4_
+ T _ZNKSt3__120__codecvt_utf8_utf16IDsE11do_encodingEv
+ T _ZNKSt3__120__codecvt_utf8_utf16IDsE13do_max_lengthEv
+ T _ZNKSt3__120__codecvt_utf8_utf16IDsE16do_always_noconvEv
+ T _ZNKSt3__120__codecvt_utf8_utf16IDsE5do_inER10_mbstate_tPKcS5_RS5_PDsS7_RS7_
+ T _ZNKSt3__120__codecvt_utf8_utf16IDsE6do_outER10_mbstate_tPKDsS5_RS5_PcS7_RS7_
+ T _ZNKSt3__120__codecvt_utf8_utf16IDsE9do_lengthER10_mbstate_tPKcS5_j
T _ZNKSt3__120__codecvt_utf8_utf16IwE10do_unshiftER10_mbstate_tPcS4_RS4_
T _ZNKSt3__120__codecvt_utf8_utf16IwE11do_encodingEv
T _ZNKSt3__120__codecvt_utf8_utf16IwE13do_max_lengthEv
@@ -498,14 +435,14 @@
T _ZNKSt3__15ctypeIcE8do_widenEc
T _ZNKSt3__15ctypeIcE9do_narrowEPKcS3_cPc
T _ZNKSt3__15ctypeIcE9do_narrowEcc
- T _ZNKSt3__15ctypeIwE10do_scan_isEjPKwS3_
+ T _ZNKSt3__15ctypeIwE10do_scan_isEtPKwS3_
T _ZNKSt3__15ctypeIwE10do_tolowerEPwPKw
T _ZNKSt3__15ctypeIwE10do_tolowerEw
T _ZNKSt3__15ctypeIwE10do_toupperEPwPKw
T _ZNKSt3__15ctypeIwE10do_toupperEw
- T _ZNKSt3__15ctypeIwE11do_scan_notEjPKwS3_
- T _ZNKSt3__15ctypeIwE5do_isEPKwS3_Pj
- T _ZNKSt3__15ctypeIwE5do_isEjw
+ T _ZNKSt3__15ctypeIwE11do_scan_notEtPKwS3_
+ T _ZNKSt3__15ctypeIwE5do_isEPKwS3_Pt
+ T _ZNKSt3__15ctypeIwE5do_isEtw
T _ZNKSt3__15ctypeIwE8do_widenEPKcS3_Pw
T _ZNKSt3__15ctypeIwE8do_widenEc
T _ZNKSt3__15ctypeIwE9do_narrowEPKwS3_cPc
@@ -520,6 +457,20 @@
C _ZNKSt3__16vectorINS_4pairIPNS_18condition_variableEPNS_5mutexEEENS_18__hidden_allocatorIS6_EEE8max_sizeEv
C _ZNKSt3__16vectorIPNS_17__assoc_sub_stateENS_18__hidden_allocatorIS2_EEE8max_sizeEv
C _ZNKSt3__16vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE8max_sizeEv
+ T _ZNKSt3__17codecvtIDic10_mbstate_tE10do_unshiftERS1_PcS4_RS4_
+ T _ZNKSt3__17codecvtIDic10_mbstate_tE11do_encodingEv
+ T _ZNKSt3__17codecvtIDic10_mbstate_tE13do_max_lengthEv
+ T _ZNKSt3__17codecvtIDic10_mbstate_tE16do_always_noconvEv
+ T _ZNKSt3__17codecvtIDic10_mbstate_tE5do_inERS1_PKcS5_RS5_PDiS7_RS7_
+ T _ZNKSt3__17codecvtIDic10_mbstate_tE6do_outERS1_PKDiS5_RS5_PcS7_RS7_
+ T _ZNKSt3__17codecvtIDic10_mbstate_tE9do_lengthERS1_PKcS5_j
+ T _ZNKSt3__17codecvtIDsc10_mbstate_tE10do_unshiftERS1_PcS4_RS4_
+ T _ZNKSt3__17codecvtIDsc10_mbstate_tE11do_encodingEv
+ T _ZNKSt3__17codecvtIDsc10_mbstate_tE13do_max_lengthEv
+ T _ZNKSt3__17codecvtIDsc10_mbstate_tE16do_always_noconvEv
+ T _ZNKSt3__17codecvtIDsc10_mbstate_tE5do_inERS1_PKcS5_RS5_PDsS7_RS7_
+ T _ZNKSt3__17codecvtIDsc10_mbstate_tE6do_outERS1_PKDsS5_RS5_PcS7_RS7_
+ T _ZNKSt3__17codecvtIDsc10_mbstate_tE9do_lengthERS1_PKcS5_j
T _ZNKSt3__17codecvtIcc10_mbstate_tE10do_unshiftERS1_PcS4_RS4_
T _ZNKSt3__17codecvtIcc10_mbstate_tE11do_encodingEv
T _ZNKSt3__17codecvtIcc10_mbstate_tE13do_max_lengthEv
@@ -527,20 +478,6 @@
T _ZNKSt3__17codecvtIcc10_mbstate_tE5do_inERS1_PKcS5_RS5_PcS7_RS7_
T _ZNKSt3__17codecvtIcc10_mbstate_tE6do_outERS1_PKcS5_RS5_PcS7_RS7_
T _ZNKSt3__17codecvtIcc10_mbstate_tE9do_lengthERS1_PKcS5_j
- T _ZNKSt3__17codecvtIjc10_mbstate_tE10do_unshiftERS1_PcS4_RS4_
- T _ZNKSt3__17codecvtIjc10_mbstate_tE11do_encodingEv
- T _ZNKSt3__17codecvtIjc10_mbstate_tE13do_max_lengthEv
- T _ZNKSt3__17codecvtIjc10_mbstate_tE16do_always_noconvEv
- T _ZNKSt3__17codecvtIjc10_mbstate_tE5do_inERS1_PKcS5_RS5_PjS7_RS7_
- T _ZNKSt3__17codecvtIjc10_mbstate_tE6do_outERS1_PKjS5_RS5_PcS7_RS7_
- T _ZNKSt3__17codecvtIjc10_mbstate_tE9do_lengthERS1_PKcS5_j
- T _ZNKSt3__17codecvtItc10_mbstate_tE10do_unshiftERS1_PcS4_RS4_
- T _ZNKSt3__17codecvtItc10_mbstate_tE11do_encodingEv
- T _ZNKSt3__17codecvtItc10_mbstate_tE13do_max_lengthEv
- T _ZNKSt3__17codecvtItc10_mbstate_tE16do_always_noconvEv
- T _ZNKSt3__17codecvtItc10_mbstate_tE5do_inERS1_PKcS5_RS5_PtS7_RS7_
- T _ZNKSt3__17codecvtItc10_mbstate_tE6do_outERS1_PKtS5_RS5_PcS7_RS7_
- T _ZNKSt3__17codecvtItc10_mbstate_tE9do_lengthERS1_PKcS5_j
T _ZNKSt3__17codecvtIwc10_mbstate_tE10do_unshiftERS1_PcS4_RS4_
T _ZNKSt3__17codecvtIwc10_mbstate_tE11do_encodingEv
T _ZNKSt3__17codecvtIwc10_mbstate_tE13do_max_lengthEv
@@ -767,13 +704,6 @@
W _ZNKSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE3putES4_bRNS_8ios_baseEwe
W _ZNKSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_bRNS_8ios_baseEwRKNS_12basic_stringIwS3_NS_9allocatorIwEEEE
W _ZNKSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_putES4_bRNS_8ios_baseEwe
- T _ZNKSt8bad_cast4whatEv
- T _ZNKSt9exception4whatEv
- T _ZNSt10bad_typeidC1Ev
- T _ZNSt10bad_typeidC2Ev
- T _ZNSt10bad_typeidD0Ev
- T _ZNSt10bad_typeidD1Ev
- T _ZNSt10bad_typeidD2Ev
T _ZNSt11logic_errorC1EPKc
T _ZNSt11logic_errorC1ERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE
T _ZNSt11logic_errorC1ERKS_
@@ -785,19 +715,19 @@
T _ZNSt11logic_errorD2Ev
T _ZNSt11logic_erroraSERKS_
T _ZNSt11range_errorD0Ev
- ? _ZNSt11range_errorD1Ev
+ T _ZNSt11range_errorD1Ev
T _ZNSt11range_errorD2Ev
T _ZNSt12domain_errorD0Ev
- ? _ZNSt12domain_errorD1Ev
+ T _ZNSt12domain_errorD1Ev
T _ZNSt12domain_errorD2Ev
T _ZNSt12length_errorD0Ev
- ? _ZNSt12length_errorD1Ev
+ T _ZNSt12length_errorD1Ev
T _ZNSt12length_errorD2Ev
T _ZNSt12out_of_rangeD0Ev
- ? _ZNSt12out_of_rangeD1Ev
+ T _ZNSt12out_of_rangeD1Ev
T _ZNSt12out_of_rangeD2Ev
T _ZNSt13bad_exceptionD0Ev
- ? _ZNSt13bad_exceptionD1Ev
+ T _ZNSt13bad_exceptionD1Ev
T _ZNSt13bad_exceptionD2Ev
T _ZNSt13exception_ptrC1ERKS_
T _ZNSt13exception_ptrC2ERKS_
@@ -815,13 +745,13 @@
T _ZNSt13runtime_errorD2Ev
T _ZNSt13runtime_erroraSERKS_
T _ZNSt14overflow_errorD0Ev
- ? _ZNSt14overflow_errorD1Ev
+ T _ZNSt14overflow_errorD1Ev
T _ZNSt14overflow_errorD2Ev
T _ZNSt15underflow_errorD0Ev
- ? _ZNSt15underflow_errorD1Ev
+ T _ZNSt15underflow_errorD1Ev
T _ZNSt15underflow_errorD2Ev
T _ZNSt16invalid_argumentD0Ev
- ? _ZNSt16invalid_argumentD1Ev
+ T _ZNSt16invalid_argumentD1Ev
T _ZNSt16invalid_argumentD2Ev
T _ZNSt16nested_exceptionC1Ev
T _ZNSt16nested_exceptionC2Ev
@@ -836,8 +766,8 @@
C _ZNSt3__110__stdinbufIcE9__getcharEb
C _ZNSt3__110__stdinbufIcE9pbackfailEi
C _ZNSt3__110__stdinbufIcE9underflowEv
- C _ZNSt3__110__stdinbufIcEC1EP7__sFILE
- C _ZNSt3__110__stdinbufIcEC2EP7__sFILE
+ C _ZNSt3__110__stdinbufIcEC1EP7__sFILEP10_mbstate_t
+ C _ZNSt3__110__stdinbufIcEC2EP7__sFILEP10_mbstate_t
C _ZNSt3__110__stdinbufIcED0Ev
C _ZNSt3__110__stdinbufIcED1Ev
C _ZNSt3__110__stdinbufIcED2Ev
@@ -846,8 +776,8 @@
C _ZNSt3__110__stdinbufIwE9__getcharEb
C _ZNSt3__110__stdinbufIwE9pbackfailEj
C _ZNSt3__110__stdinbufIwE9underflowEv
- C _ZNSt3__110__stdinbufIwEC1EP7__sFILE
- C _ZNSt3__110__stdinbufIwEC2EP7__sFILE
+ C _ZNSt3__110__stdinbufIwEC1EP7__sFILEP10_mbstate_t
+ C _ZNSt3__110__stdinbufIwEC2EP7__sFILEP10_mbstate_t
C _ZNSt3__110__stdinbufIwED0Ev
C _ZNSt3__110__stdinbufIwED1Ev
C _ZNSt3__110__stdinbufIwED2Ev
@@ -864,29 +794,45 @@
T _ZNSt3__110__time_putD1Ev
T _ZNSt3__110__time_putD2Ev
D _ZNSt3__110adopt_lockE
+ D _ZNSt3__110ctype_base5alnumE
+ D _ZNSt3__110ctype_base5alphaE
+ D _ZNSt3__110ctype_base5blankE
+ D _ZNSt3__110ctype_base5cntrlE
+ D _ZNSt3__110ctype_base5digitE
+ D _ZNSt3__110ctype_base5graphE
+ D _ZNSt3__110ctype_base5lowerE
+ D _ZNSt3__110ctype_base5printE
+ D _ZNSt3__110ctype_base5punctE
+ D _ZNSt3__110ctype_base5spaceE
+ D _ZNSt3__110ctype_base5upperE
+ D _ZNSt3__110ctype_base6xdigitE
D _ZNSt3__110defer_lockE
T _ZNSt3__110istrstreamD0Ev
T _ZNSt3__110istrstreamD1Ev
T _ZNSt3__110istrstreamD2Ev
W _ZNSt3__110moneypunctIcLb0EE2idE
+ W _ZNSt3__110moneypunctIcLb0EE4intlE
W _ZNSt3__110moneypunctIcLb0EEC1Ej
W _ZNSt3__110moneypunctIcLb0EEC2Ej
W _ZNSt3__110moneypunctIcLb0EED0Ev
W _ZNSt3__110moneypunctIcLb0EED1Ev
W _ZNSt3__110moneypunctIcLb0EED2Ev
W _ZNSt3__110moneypunctIcLb1EE2idE
+ W _ZNSt3__110moneypunctIcLb1EE4intlE
W _ZNSt3__110moneypunctIcLb1EEC1Ej
W _ZNSt3__110moneypunctIcLb1EEC2Ej
W _ZNSt3__110moneypunctIcLb1EED0Ev
W _ZNSt3__110moneypunctIcLb1EED1Ev
W _ZNSt3__110moneypunctIcLb1EED2Ev
W _ZNSt3__110moneypunctIwLb0EE2idE
+ W _ZNSt3__110moneypunctIwLb0EE4intlE
W _ZNSt3__110moneypunctIwLb0EEC1Ej
W _ZNSt3__110moneypunctIwLb0EEC2Ej
W _ZNSt3__110moneypunctIwLb0EED0Ev
W _ZNSt3__110moneypunctIwLb0EED1Ev
W _ZNSt3__110moneypunctIwLb0EED2Ev
W _ZNSt3__110moneypunctIwLb1EE2idE
+ W _ZNSt3__110moneypunctIwLb1EE4intlE
W _ZNSt3__110moneypunctIwLb1EEC1Ej
W _ZNSt3__110moneypunctIwLb1EEC2Ej
W _ZNSt3__110moneypunctIwLb1EED0Ev
@@ -904,10 +850,6 @@
T _ZNSt3__110to_wstringEm
T _ZNSt3__110to_wstringEx
T _ZNSt3__110to_wstringEy
- T _ZNSt3__110unique_ptrINS_6locale5facetENS_12_GLOBAL__N_17releaseEEC1EPS2_
- t _ZNSt3__110unique_ptrINS_6locale5facetENS_12_GLOBAL__N_17releaseEEC2EPS2_
- T _ZNSt3__110unique_ptrINS_6locale5facetENS_12_GLOBAL__N_17releaseEED1Ev
- t _ZNSt3__110unique_ptrINS_6locale5facetENS_12_GLOBAL__N_17releaseEED2Ev
T _ZNSt3__111__call_onceERVmPvPFvS2_E
T _ZNSt3__111__libcpp_db10__insert_cEPv
T _ZNSt3__111__libcpp_db10__insert_iEPv
@@ -940,16 +882,16 @@
C _ZNSt3__111__stdoutbufIcE4syncEv
C _ZNSt3__111__stdoutbufIcE5imbueERKNS_6localeE
C _ZNSt3__111__stdoutbufIcE8overflowEi
- C _ZNSt3__111__stdoutbufIcEC1EP7__sFILE
- C _ZNSt3__111__stdoutbufIcEC2EP7__sFILE
+ C _ZNSt3__111__stdoutbufIcEC1EP7__sFILEP10_mbstate_t
+ C _ZNSt3__111__stdoutbufIcEC2EP7__sFILEP10_mbstate_t
C _ZNSt3__111__stdoutbufIcED0Ev
C _ZNSt3__111__stdoutbufIcED1Ev
C _ZNSt3__111__stdoutbufIcED2Ev
C _ZNSt3__111__stdoutbufIwE4syncEv
C _ZNSt3__111__stdoutbufIwE5imbueERKNS_6localeE
C _ZNSt3__111__stdoutbufIwE8overflowEj
- C _ZNSt3__111__stdoutbufIwEC1EP7__sFILE
- C _ZNSt3__111__stdoutbufIwEC2EP7__sFILE
+ C _ZNSt3__111__stdoutbufIwEC1EP7__sFILEP10_mbstate_t
+ C _ZNSt3__111__stdoutbufIwEC2EP7__sFILEP10_mbstate_t
C _ZNSt3__111__stdoutbufIwED0Ev
C _ZNSt3__111__stdoutbufIwED1Ev
C _ZNSt3__111__stdoutbufIwED2Ev
@@ -968,54 +910,16 @@
T _ZNSt3__111timed_mutexD2Ev
D _ZNSt3__111try_to_lockE
C _ZNSt3__111unique_lockINS_5mutexEE6unlockEv
- t _ZNSt3__112_GLOBAL__N_110use_strcmpclERKNS0_10classnamesEPKc
- t _ZNSt3__112_GLOBAL__N_110use_strcmpclERKNS0_14collationnamesEPKc
- T _ZNSt3__112_GLOBAL__N_111__fake_bindC1EMNS_6locale2idEFvvEPS3_
- t _ZNSt3__112_GLOBAL__N_111__fake_bindC2EMNS_6locale2idEFvvEPS3_
- t _ZNSt3__112_GLOBAL__N_13mutEv
- t _ZNSt3__112_GLOBAL__N_14makeINS_10moneypunctIcLb0EEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_10moneypunctIcLb1EEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_10moneypunctIwLb0EEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_10moneypunctIwLb1EEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_5ctypeIcEEPjbiEERT_T0_T1_T2_
- t _ZNSt3__112_GLOBAL__N_14makeINS_5ctypeIwEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_6locale5__impEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_7codecvtIcc10_mbstate_tEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_7codecvtIjc10_mbstate_tEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_7codecvtItc10_mbstate_tEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_7codecvtIwc10_mbstate_tEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_7collateIcEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_7collateIwEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_7num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_7num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_7num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_7num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_8messagesIcEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_8messagesIwEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_8numpunctIcEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_8numpunctIwEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_8time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_8time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_8time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_8time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_9money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_9money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_9money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_14makeINS_9money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEEiEERT_T0_
- t _ZNSt3__112_GLOBAL__N_17releaseclEPNS_6locale5facetE
- t _ZNSt3__112_GLOBAL__N_19decrementIlEET_RS2_
- t _ZNSt3__112_GLOBAL__N_19incrementIlEET_RS2_
- d _ZNSt3__112_GLOBAL__N_1L10ClassNamesE
- d _ZNSt3__112_GLOBAL__N_1L12collatenamesE
- d _ZNSt3__112_GLOBAL__N_1L12small_primesE
- d _ZNSt3__112_GLOBAL__N_1L7indicesE
C _ZNSt3__112__asprintf_lEPPcPvPKcz
C _ZNSt3__112__do_messageC2Ev
C _ZNSt3__112__do_messageD0Ev
C _ZNSt3__112__do_messageD1Ev
C _ZNSt3__112__do_messageD2Ev
T _ZNSt3__112__do_nothingEPv
+ T _ZNSt3__112__get_sp_mutEPKv
T _ZNSt3__112__next_primeEj
+ C _ZNSt3__112__rotate_gcdINS_11__wrap_iterIPcEEEET_S4_S4_S4_
+ C _ZNSt3__112__rotate_gcdINS_11__wrap_iterIPwEEEET_S4_S4_S4_
D _ZNSt3__112__rs_default4__c_E
T _ZNSt3__112__rs_defaultC1ERKS0_
T _ZNSt3__112__rs_defaultC1Ev
@@ -1034,6 +938,8 @@
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12__swap_allocERS4_S6_NS_17integral_constantIbLb0EEE
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE12__swap_allocERS4_S6_NS_17integral_constantIbLb1EEE
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerEv
+ W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__move_assignERS5_NS_17integral_constantIbLb0EEE
+ W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__move_assignERS5_NS_17integral_constantIbLb1EEE
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13shrink_to_fitEv
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__erase_to_endEj
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE14__set_long_capEj
@@ -1072,13 +978,17 @@
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKcj
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendERKS5_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendERKS5_jj
+ W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendESt16initializer_listIcE
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEjc
C _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendIPcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueERS5_E4typeES9_S9_
+ W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEOS5_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKcj
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignERKS5_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignERKS5_jj
+ W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignESt16initializer_listIcE
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEjc
+ W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertENS_11__wrap_iterIPKcEESt16initializer_listIcE
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertENS_11__wrap_iterIPKcEEc
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertENS_11__wrap_iterIPKcEEjc
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEjPKc
@@ -1086,6 +996,7 @@
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEjRKS5_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEjRKS5_jj
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEjjc
+ C _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertIPKcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueENS_11__wrap_iterIPcEEE4typeENSB_IS8_EESA_SA_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6rbeginEv
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEj
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEjc
@@ -1093,16 +1004,20 @@
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceENS_11__wrap_iterIPKcEES9_RKS5_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceENS_11__wrap_iterIPKcEES9_S8_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceENS_11__wrap_iterIPKcEES9_S8_j
+ W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceENS_11__wrap_iterIPKcEES9_St16initializer_listIcE
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceENS_11__wrap_iterIPKcEES9_jc
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEjjPKc
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEjjPKcj
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEjjRKS5_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEjjRKS5_jj
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEjjjc
+ C _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceIPKcEENS_9enable_ifIXsr19__is_input_iteratorIT_EE5valueERS5_E4typeENS_11__wrap_iterIS8_EESF_SA_SA_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEj
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE8pop_backEv
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEjjjjjj
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc
+ W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1EOS5_
+ W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1EOS5_RKS4_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1EPKc
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1EPKcRKS4_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1EPKcj
@@ -1111,9 +1026,13 @@
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_RKS4_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_jjRKS4_
+ W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ESt16initializer_listIcE
+ W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ESt16initializer_listIcERKS4_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1Ejc
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1EjcRKS4_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1Ev
+ W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2EOS5_
+ W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2EOS5_RKS4_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2EPKc
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2EPKcRKS4_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2EPKcj
@@ -1122,17 +1041,22 @@
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_RKS4_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ERKS5_jjRKS4_
+ W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ESt16initializer_listIcE
+ W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2ESt16initializer_listIcERKS4_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2Ejc
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2EjcRKS4_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2Ev
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev
+ W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEOS5_
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEPKc
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSERKS5_
+ W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSESt16initializer_listIcE
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSEc
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEixEj
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEpLEPKc
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEpLERKS5_
+ W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEpLESt16initializer_listIcE
W _ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEpLEc
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE10__set_sizeEj
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE11__recommendEj
@@ -1140,6 +1064,8 @@
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12__swap_allocERS4_S6_NS_17integral_constantIbLb0EEE
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE12__swap_allocERS4_S6_NS_17integral_constantIbLb1EEE
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__get_pointerEv
+ W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__move_assignERS5_NS_17integral_constantIbLb0EEE
+ W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13__move_assignERS5_NS_17integral_constantIbLb1EEE
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE13shrink_to_fitEv
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__erase_to_endEj
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE14__set_long_capEj
@@ -1178,14 +1104,18 @@
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEPKwj
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendERKS5_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendERKS5_jj
+ W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendESt16initializer_listIwE
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendEjw
C _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6appendIPwEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueERS5_E4typeES9_S9_
+ W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEOS5_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKw
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEPKwj
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignERKS5_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignERKS5_jj
+ W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignESt16initializer_listIwE
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignEjw
C _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6assignIPwEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueERS5_E4typeES9_S9_
+ W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertENS_11__wrap_iterIPKwEESt16initializer_listIwE
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertENS_11__wrap_iterIPKwEEjw
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertENS_11__wrap_iterIPKwEEw
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEjPKw
@@ -1193,6 +1123,7 @@
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEjRKS5_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEjRKS5_jj
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertEjjw
+ C _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6insertIPKwEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueENS_11__wrap_iterIPwEEE4typeENSB_IS8_EESA_SA_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6rbeginEv
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEj
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEjw
@@ -1200,16 +1131,20 @@
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceENS_11__wrap_iterIPKwEES9_RKS5_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceENS_11__wrap_iterIPKwEES9_S8_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceENS_11__wrap_iterIPKwEES9_S8_j
+ W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceENS_11__wrap_iterIPKwEES9_St16initializer_listIwE
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceENS_11__wrap_iterIPKwEES9_jw
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEjjPKw
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEjjPKwj
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEjjRKS5_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEjjRKS5_jj
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceEjjjw
+ C _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7replaceIPKwEENS_9enable_ifIXsr19__is_input_iteratorIT_EE5valueERS5_E4typeENS_11__wrap_iterIS8_EESF_SA_SA_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE7reserveEj
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE8pop_backEv
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9__grow_byEjjjjjj
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw
+ W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1EOS5_
+ W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1EOS5_RKS4_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1EPKw
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1EPKwRKS4_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1EPKwj
@@ -1218,9 +1153,13 @@
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS5_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS5_RKS4_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ERKS5_jjRKS4_
+ W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ESt16initializer_listIwE
+ W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1ESt16initializer_listIwERKS4_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1Ejw
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1EjwRKS4_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC1Ev
+ W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2EOS5_
+ W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2EOS5_RKS4_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2EPKw
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2EPKwRKS4_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2EPKwj
@@ -1229,17 +1168,22 @@
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS5_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS5_RKS4_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ERKS5_jjRKS4_
+ W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ESt16initializer_listIwE
+ W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2ESt16initializer_listIwERKS4_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2Ejw
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2EjwRKS4_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEC2Ev
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED1Ev
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev
+ W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSEOS5_
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSEPKw
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSERKS5_
+ W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSESt16initializer_listIwE
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEaSEw
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEixEj
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEpLEPKw
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEpLERKS5_
+ W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEpLESt16initializer_listIwE
W _ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEpLEw
T _ZNSt3__112ctype_bynameIcEC1EPKcj
T _ZNSt3__112ctype_bynameIcEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj
@@ -1316,9 +1260,9 @@
T _ZNSt3__112system_errorD0Ev
T _ZNSt3__112system_errorD1Ev
T _ZNSt3__112system_errorD2Ev
- t _ZNSt3__113__lower_boundIRNS_12_GLOBAL__N_110use_strcmpEPKNS1_10classnamesEPKcEET0_S9_S9_RKT1_T_
- t _ZNSt3__113__lower_boundIRNS_12_GLOBAL__N_110use_strcmpEPKNS1_14collationnamesEPKcEET0_S9_S9_RKT1_T_
C _ZNSt3__113__lower_boundIRNS_6__lessIjjEEPKjjEET0_S6_S6_RKT1_T_
+ C _ZNSt3__113__rotate_leftINS_11__wrap_iterIPcEEEET_S4_S4_
+ C _ZNSt3__113__rotate_leftINS_11__wrap_iterIPwEEEET_S4_S4_
C _ZNSt3__113__vector_baseINS_4pairIPNS_18condition_variableEPNS_5mutexEEENS_18__hidden_allocatorIS6_EEED2Ev
C _ZNSt3__113__vector_baseIPNS_17__assoc_sub_stateENS_18__hidden_allocatorIS2_EEED2Ev
C _ZNSt3__113__vector_baseIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEED2Ev
@@ -1344,11 +1288,14 @@
W _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE7getlineEPcic
W _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE7putbackEc
W _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEE8readsomeEPci
+ W _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEEC1EOS3_
W _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEEC1EPNS_15basic_streambufIcS2_EE
+ W _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEEC2EOS3_
W _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEEC2EPNS_15basic_streambufIcS2_EE
W _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEED0Ev
W _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEED1Ev
W _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEED2Ev
+ W _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEEaSEOS3_
W _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsEPFRNS_8ios_baseES5_E
W _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsEPFRNS_9basic_iosIcS2_EES6_E
W _ZNSt3__113basic_istreamIcNS_11char_traitsIcEEErsEPFRS3_S4_E
@@ -1387,11 +1334,14 @@
W _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE7getlineEPwiw
W _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE7putbackEw
W _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEE8readsomeEPwi
+ W _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEEC1EOS3_
W _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEEC1EPNS_15basic_streambufIwS2_EE
+ W _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEEC2EOS3_
W _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEEC2EPNS_15basic_streambufIwS2_EE
W _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEED0Ev
W _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEED1Ev
W _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEED2Ev
+ W _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEEaSEOS3_
W _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsEPFRNS_8ios_baseES5_E
W _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsEPFRNS_9basic_iosIwS2_EES6_E
W _ZNSt3__113basic_istreamIwNS_11char_traitsIwEEErsEPFRS3_S4_E
@@ -1420,13 +1370,16 @@
W _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryC2ERS3_
W _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD1Ev
W _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD2Ev
+ W _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEEC1EOS3_
W _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEEC1EPNS_15basic_streambufIcS2_EE
W _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEEC1Ev
+ W _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEEC2EOS3_
W _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEEC2EPNS_15basic_streambufIcS2_EE
W _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEEC2Ev
W _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEED0Ev
W _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEED1Ev
W _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEED2Ev
+ W _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEEaSEOS3_
W _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPFRNS_8ios_baseES5_E
W _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPFRNS_9basic_iosIcS2_EES6_E
W _ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPFRS3_S4_E
@@ -1455,13 +1408,16 @@
W _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE6sentryC2ERS3_
W _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE6sentryD1Ev
W _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEE6sentryD2Ev
+ W _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEEC1EOS3_
W _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEEC1EPNS_15basic_streambufIwS2_EE
W _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEEC1Ev
+ W _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEEC2EOS3_
W _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEEC2EPNS_15basic_streambufIwS2_EE
W _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEEC2Ev
W _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEED0Ev
W _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEED1Ev
W _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEED2Ev
+ W _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEEaSEOS3_
W _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEPFRNS_8ios_baseES5_E
W _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEPFRNS_9basic_iosIwS2_EES6_E
W _ZNSt3__113basic_ostreamIwNS_11char_traitsIwEEElsEPFRS3_S4_E
@@ -1489,12 +1445,12 @@
T _ZNSt3__113shared_futureIvED1Ev
T _ZNSt3__113shared_futureIvED2Ev
T _ZNSt3__113shared_futureIvEaSERKS1_
- C _ZNSt3__114__codecvt_utf8IjED0Ev
- C _ZNSt3__114__codecvt_utf8IjED1Ev
- C _ZNSt3__114__codecvt_utf8IjED2Ev
- C _ZNSt3__114__codecvt_utf8ItED0Ev
- C _ZNSt3__114__codecvt_utf8ItED1Ev
- C _ZNSt3__114__codecvt_utf8ItED2Ev
+ C _ZNSt3__114__codecvt_utf8IDiED0Ev
+ C _ZNSt3__114__codecvt_utf8IDiED1Ev
+ C _ZNSt3__114__codecvt_utf8IDiED2Ev
+ C _ZNSt3__114__codecvt_utf8IDsED0Ev
+ C _ZNSt3__114__codecvt_utf8IDsED1Ev
+ C _ZNSt3__114__codecvt_utf8IDsED2Ev
C _ZNSt3__114__codecvt_utf8IwED0Ev
C _ZNSt3__114__codecvt_utf8IwED1Ev
C _ZNSt3__114__codecvt_utf8IwED2Ev
@@ -1504,10 +1460,10 @@
T _ZNSt3__114__num_put_base12__format_intEPcPKcbj
T _ZNSt3__114__num_put_base14__format_floatEPcPKcj
T _ZNSt3__114__num_put_base18__identify_paddingEPcS1_RKNS_8ios_baseE
+ C _ZNSt3__114__rotate_rightINS_11__wrap_iterIPcEEEET_S4_S4_
+ C _ZNSt3__114__rotate_rightINS_11__wrap_iterIPwEEEET_S4_S4_
C _ZNSt3__114__scan_keywordINS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEPKNS_12basic_stringIcS3_NS_9allocatorIcEEEENS_5ctypeIcEEEET0_RT_SE_SD_SD_RKT1_Rjb
- C _ZNSt3__114__scan_keywordINS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEPNS_12basic_stringIcS3_NS_9allocatorIcEEEENS_5ctypeIcEEEET0_RT_SD_SC_SC_RKT1_Rjb
C _ZNSt3__114__scan_keywordINS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEPKNS_12basic_stringIwS3_NS_9allocatorIwEEEENS_5ctypeIwEEEET0_RT_SE_SD_SD_RKT1_Rjb
- C _ZNSt3__114__scan_keywordINS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEPNS_12basic_stringIwS3_NS_9allocatorIwEEEENS_5ctypeIwEEEET0_RT_SD_SC_SC_RKT1_Rjb
C _ZNSt3__114__scan_keywordIPcPNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_5ctypeIcEEEET0_RT_SC_SB_SB_RKT1_Rjb
C _ZNSt3__114__scan_keywordIPwPNS_12basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEEENS_5ctypeIwEEEET0_RT_SC_SB_SB_RKT1_Rjb
T _ZNSt3__114__shared_count12__add_sharedEv
@@ -1515,31 +1471,42 @@
T _ZNSt3__114__shared_countD0Ev
T _ZNSt3__114__shared_countD1Ev
T _ZNSt3__114__shared_countD2Ev
- C _ZNSt3__114__split_bufferINS_4pairIPNS_18condition_variableEPNS_5mutexEEERNS_18__hidden_allocatorIS6_EEE10push_frontERKS6_
- C _ZNSt3__114__split_bufferINS_4pairIPNS_18condition_variableEPNS_5mutexEEERNS_18__hidden_allocatorIS6_EEE18__construct_at_endINS_13move_iteratorIPS6_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESG_SG_
C _ZNSt3__114__split_bufferINS_4pairIPNS_18condition_variableEPNS_5mutexEEERNS_18__hidden_allocatorIS6_EEEC1EjjS9_
C _ZNSt3__114__split_bufferINS_4pairIPNS_18condition_variableEPNS_5mutexEEERNS_18__hidden_allocatorIS6_EEEC2EjjS9_
C _ZNSt3__114__split_bufferINS_4pairIPNS_18condition_variableEPNS_5mutexEEERNS_18__hidden_allocatorIS6_EEED1Ev
C _ZNSt3__114__split_bufferINS_4pairIPNS_18condition_variableEPNS_5mutexEEERNS_18__hidden_allocatorIS6_EEED2Ev
- C _ZNSt3__114__split_bufferIPNS_17__assoc_sub_stateERNS_18__hidden_allocatorIS2_EEE10push_frontERKS2_
- C _ZNSt3__114__split_bufferIPNS_17__assoc_sub_stateERNS_18__hidden_allocatorIS2_EEE18__construct_at_endINS_13move_iteratorIPS2_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESC_SC_
C _ZNSt3__114__split_bufferIPNS_17__assoc_sub_stateERNS_18__hidden_allocatorIS2_EEEC1EjjS5_
C _ZNSt3__114__split_bufferIPNS_17__assoc_sub_stateERNS_18__hidden_allocatorIS2_EEEC2EjjS5_
C _ZNSt3__114__split_bufferIPNS_17__assoc_sub_stateERNS_18__hidden_allocatorIS2_EEED1Ev
C _ZNSt3__114__split_bufferIPNS_17__assoc_sub_stateERNS_18__hidden_allocatorIS2_EEED2Ev
- C _ZNSt3__114__split_bufferIPNS_6locale5facetERNS_15__sso_allocatorIS3_Lj28EEEE10push_frontERKS3_
C _ZNSt3__114__split_bufferIPNS_6locale5facetERNS_15__sso_allocatorIS3_Lj28EEEE18__construct_at_endEj
- C _ZNSt3__114__split_bufferIPNS_6locale5facetERNS_15__sso_allocatorIS3_Lj28EEEE18__construct_at_endINS_13move_iteratorIPS3_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESD_SD_
C _ZNSt3__114__split_bufferIPNS_6locale5facetERNS_15__sso_allocatorIS3_Lj28EEEEC1EjjS6_
C _ZNSt3__114__split_bufferIPNS_6locale5facetERNS_15__sso_allocatorIS3_Lj28EEEEC2EjjS6_
C _ZNSt3__114__split_bufferIPNS_6locale5facetERNS_15__sso_allocatorIS3_Lj28EEEED1Ev
C _ZNSt3__114__split_bufferIPNS_6locale5facetERNS_15__sso_allocatorIS3_Lj28EEEED2Ev
W _ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEE4swapERS3_
+ W _ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEEC1EOS3_
W _ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEEC1EPNS_15basic_streambufIcS2_EE
+ W _ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEEC2EOS3_
W _ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEEC2EPNS_15basic_streambufIcS2_EE
W _ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEED0Ev
W _ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEED1Ev
W _ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEED2Ev
+ W _ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEEaSEOS3_
+ W _ZNSt3__114codecvt_bynameIDic10_mbstate_tEC1EPKcj
+ W _ZNSt3__114codecvt_bynameIDic10_mbstate_tEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj
+ W _ZNSt3__114codecvt_bynameIDic10_mbstate_tEC2EPKcj
+ W _ZNSt3__114codecvt_bynameIDic10_mbstate_tEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj
+ W _ZNSt3__114codecvt_bynameIDic10_mbstate_tED0Ev
+ W _ZNSt3__114codecvt_bynameIDic10_mbstate_tED1Ev
+ W _ZNSt3__114codecvt_bynameIDic10_mbstate_tED2Ev
+ W _ZNSt3__114codecvt_bynameIDsc10_mbstate_tEC1EPKcj
+ W _ZNSt3__114codecvt_bynameIDsc10_mbstate_tEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj
+ W _ZNSt3__114codecvt_bynameIDsc10_mbstate_tEC2EPKcj
+ W _ZNSt3__114codecvt_bynameIDsc10_mbstate_tEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj
+ W _ZNSt3__114codecvt_bynameIDsc10_mbstate_tED0Ev
+ W _ZNSt3__114codecvt_bynameIDsc10_mbstate_tED1Ev
+ W _ZNSt3__114codecvt_bynameIDsc10_mbstate_tED2Ev
W _ZNSt3__114codecvt_bynameIcc10_mbstate_tEC1EPKcj
W _ZNSt3__114codecvt_bynameIcc10_mbstate_tEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj
W _ZNSt3__114codecvt_bynameIcc10_mbstate_tEC2EPKcj
@@ -1547,20 +1514,6 @@
W _ZNSt3__114codecvt_bynameIcc10_mbstate_tED0Ev
W _ZNSt3__114codecvt_bynameIcc10_mbstate_tED1Ev
W _ZNSt3__114codecvt_bynameIcc10_mbstate_tED2Ev
- W _ZNSt3__114codecvt_bynameIjc10_mbstate_tEC1EPKcj
- W _ZNSt3__114codecvt_bynameIjc10_mbstate_tEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj
- W _ZNSt3__114codecvt_bynameIjc10_mbstate_tEC2EPKcj
- W _ZNSt3__114codecvt_bynameIjc10_mbstate_tEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj
- W _ZNSt3__114codecvt_bynameIjc10_mbstate_tED0Ev
- W _ZNSt3__114codecvt_bynameIjc10_mbstate_tED1Ev
- W _ZNSt3__114codecvt_bynameIjc10_mbstate_tED2Ev
- W _ZNSt3__114codecvt_bynameItc10_mbstate_tEC1EPKcj
- W _ZNSt3__114codecvt_bynameItc10_mbstate_tEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj
- W _ZNSt3__114codecvt_bynameItc10_mbstate_tEC2EPKcj
- W _ZNSt3__114codecvt_bynameItc10_mbstate_tEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj
- W _ZNSt3__114codecvt_bynameItc10_mbstate_tED0Ev
- W _ZNSt3__114codecvt_bynameItc10_mbstate_tED1Ev
- W _ZNSt3__114codecvt_bynameItc10_mbstate_tED2Ev
W _ZNSt3__114codecvt_bynameIwc10_mbstate_tEC1EPKcj
W _ZNSt3__114codecvt_bynameIwc10_mbstate_tEC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj
W _ZNSt3__114codecvt_bynameIwc10_mbstate_tEC2EPKcj
@@ -1586,18 +1539,18 @@
T _ZNSt3__114error_categoryD0Ev
T _ZNSt3__114error_categoryD1Ev
T _ZNSt3__114error_categoryD2Ev
- C _ZNSt3__115__codecvt_utf16IjLb0EED0Ev
- C _ZNSt3__115__codecvt_utf16IjLb0EED1Ev
- C _ZNSt3__115__codecvt_utf16IjLb0EED2Ev
- C _ZNSt3__115__codecvt_utf16IjLb1EED0Ev
- C _ZNSt3__115__codecvt_utf16IjLb1EED1Ev
- C _ZNSt3__115__codecvt_utf16IjLb1EED2Ev
- C _ZNSt3__115__codecvt_utf16ItLb0EED0Ev
- C _ZNSt3__115__codecvt_utf16ItLb0EED1Ev
- C _ZNSt3__115__codecvt_utf16ItLb0EED2Ev
- C _ZNSt3__115__codecvt_utf16ItLb1EED0Ev
- C _ZNSt3__115__codecvt_utf16ItLb1EED1Ev
- C _ZNSt3__115__codecvt_utf16ItLb1EED2Ev
+ C _ZNSt3__115__codecvt_utf16IDiLb0EED0Ev
+ C _ZNSt3__115__codecvt_utf16IDiLb0EED1Ev
+ C _ZNSt3__115__codecvt_utf16IDiLb0EED2Ev
+ C _ZNSt3__115__codecvt_utf16IDiLb1EED0Ev
+ C _ZNSt3__115__codecvt_utf16IDiLb1EED1Ev
+ C _ZNSt3__115__codecvt_utf16IDiLb1EED2Ev
+ C _ZNSt3__115__codecvt_utf16IDsLb0EED0Ev
+ C _ZNSt3__115__codecvt_utf16IDsLb0EED1Ev
+ C _ZNSt3__115__codecvt_utf16IDsLb0EED2Ev
+ C _ZNSt3__115__codecvt_utf16IDsLb1EED0Ev
+ C _ZNSt3__115__codecvt_utf16IDsLb1EED1Ev
+ C _ZNSt3__115__codecvt_utf16IDsLb1EED2Ev
C _ZNSt3__115__codecvt_utf16IwLb0EED0Ev
C _ZNSt3__115__codecvt_utf16IwLb0EED1Ev
C _ZNSt3__115__codecvt_utf16IwLb0EED2Ev
@@ -1727,7 +1680,7 @@
T _ZNSt3__115numpunct_bynameIcEC2EPKcj
T _ZNSt3__115numpunct_bynameIcEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj
T _ZNSt3__115numpunct_bynameIcED0Ev
- ? _ZNSt3__115numpunct_bynameIcED1Ev
+ T _ZNSt3__115numpunct_bynameIcED1Ev
T _ZNSt3__115numpunct_bynameIcED2Ev
T _ZNSt3__115numpunct_bynameIwE6__initEPKc
T _ZNSt3__115numpunct_bynameIwEC1EPKcj
@@ -1735,7 +1688,7 @@
T _ZNSt3__115numpunct_bynameIwEC2EPKcj
T _ZNSt3__115numpunct_bynameIwEC2ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEj
T _ZNSt3__115numpunct_bynameIwED0Ev
- ? _ZNSt3__115numpunct_bynameIwED1Ev
+ T _ZNSt3__115numpunct_bynameIwED1Ev
T _ZNSt3__115numpunct_bynameIwED2Ev
T _ZNSt3__115recursive_mutex4lockEv
T _ZNSt3__115recursive_mutex6unlockEv
@@ -1775,13 +1728,13 @@
W _ZNSt3__115time_put_bynameIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEED2Ev
T _ZNSt3__116__check_groupingERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEPjS8_Rj
T _ZNSt3__116__narrow_to_utf8ILj16EED0Ev
- ? _ZNSt3__116__narrow_to_utf8ILj16EED1Ev
- ? _ZNSt3__116__narrow_to_utf8ILj16EED2Ev
+ T _ZNSt3__116__narrow_to_utf8ILj16EED1Ev
+ T _ZNSt3__116__narrow_to_utf8ILj16EED2Ev
T _ZNSt3__116__narrow_to_utf8ILj32EED0Ev
- ? _ZNSt3__116__narrow_to_utf8ILj32EED1Ev
- ? _ZNSt3__116__narrow_to_utf8ILj32EED2Ev
- C _ZNSt3__116__pad_and_outputIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEET0_S5_PKT_S8_S8_RNS_8ios_baseES6_
- C _ZNSt3__116__pad_and_outputIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEET0_S5_PKT_S8_S8_RNS_8ios_baseES6_
+ T _ZNSt3__116__narrow_to_utf8ILj32EED1Ev
+ T _ZNSt3__116__narrow_to_utf8ILj32EED2Ev
+ C _ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
+ C _ZNSt3__116__pad_and_outputIwNS_11char_traitsIwEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
T _ZNSt3__116generic_categoryEv
T _ZNSt3__117__assoc_sub_state10__sub_waitERNS_11unique_lockINS_5mutexEEE
T _ZNSt3__117__assoc_sub_state12__make_readyEv
@@ -1796,17 +1749,12 @@
C _ZNSt3__117__assoc_sub_stateD0Ev
C _ZNSt3__117__assoc_sub_stateD1Ev
C _ZNSt3__117__assoc_sub_stateD2Ev
- T _ZNSt3__117__call_once_paramINS_12_GLOBAL__N_111__fake_bindEEC1ERKS2_
- t _ZNSt3__117__call_once_paramINS_12_GLOBAL__N_111__fake_bindEEC2ERKS2_
- t _ZNSt3__117__call_once_proxyINS_12_GLOBAL__N_111__fake_bindEEEvPv
- T _ZNSt3__117__compressed_pairIPNS_6locale5facetENS_12_GLOBAL__N_17releaseEEC1ES3_i
- t _ZNSt3__117__compressed_pairIPNS_6locale5facetENS_12_GLOBAL__N_17releaseEEC2ES3_i
T _ZNSt3__117__widen_from_utf8ILj16EED0Ev
- ? _ZNSt3__117__widen_from_utf8ILj16EED1Ev
- ? _ZNSt3__117__widen_from_utf8ILj16EED2Ev
+ T _ZNSt3__117__widen_from_utf8ILj16EED1Ev
+ T _ZNSt3__117__widen_from_utf8ILj16EED2Ev
T _ZNSt3__117__widen_from_utf8ILj32EED0Ev
- ? _ZNSt3__117__widen_from_utf8ILj32EED1Ev
- ? _ZNSt3__117__widen_from_utf8ILj32EED2Ev
+ T _ZNSt3__117__widen_from_utf8ILj32EED1Ev
+ T _ZNSt3__117__widen_from_utf8ILj32EED2Ev
T _ZNSt3__117declare_reachableEPv
T _ZNSt3__117iostream_categoryEv
T _ZNSt3__117moneypunct_bynameIcLb0EE4initEPKc
@@ -1893,7 +1841,7 @@
T _ZNSt3__119__shared_weak_count16__release_sharedEv
T _ZNSt3__119__shared_weak_count4lockEv
T _ZNSt3__119__shared_weak_countD0Ev
- ? _ZNSt3__119__shared_weak_countD1Ev
+ T _ZNSt3__119__shared_weak_countD1Ev
T _ZNSt3__119__shared_weak_countD2Ev
D _ZNSt3__119__start_std_streamsE
T _ZNSt3__119__thread_local_dataEv
@@ -1905,12 +1853,12 @@
T _ZNSt3__119__thread_struct_impD2Ev
T _ZNSt3__119declare_no_pointersEPcj
D _ZNSt3__119piecewise_constructE
- C _ZNSt3__120__codecvt_utf8_utf16IjED0Ev
- C _ZNSt3__120__codecvt_utf8_utf16IjED1Ev
- C _ZNSt3__120__codecvt_utf8_utf16IjED2Ev
- C _ZNSt3__120__codecvt_utf8_utf16ItED0Ev
- C _ZNSt3__120__codecvt_utf8_utf16ItED1Ev
- C _ZNSt3__120__codecvt_utf8_utf16ItED2Ev
+ C _ZNSt3__120__codecvt_utf8_utf16IDiED0Ev
+ C _ZNSt3__120__codecvt_utf8_utf16IDiED1Ev
+ C _ZNSt3__120__codecvt_utf8_utf16IDiED2Ev
+ C _ZNSt3__120__codecvt_utf8_utf16IDsED0Ev
+ C _ZNSt3__120__codecvt_utf8_utf16IDsED1Ev
+ C _ZNSt3__120__codecvt_utf8_utf16IDsED2Ev
C _ZNSt3__120__codecvt_utf8_utf16IwED0Ev
C _ZNSt3__120__codecvt_utf8_utf16IwED1Ev
C _ZNSt3__120__codecvt_utf8_utf16IwED2Ev
@@ -1924,6 +1872,7 @@
C _ZNSt3__120__time_get_c_storageIwEC2Ev
W _ZNSt3__120__vector_base_commonILb1EEC1Ev
W _ZNSt3__120__vector_base_commonILb1EEC2Ev
+ C _ZNSt3__121__murmur2_or_cityhashIjLj32EEclEPKvj
C _ZNSt3__121__thread_specific_ptrINS_15__thread_structEE16__at_thread_exitEPv
C _ZNSt3__121__thread_specific_ptrINS_15__thread_structEEC1Ev
C _ZNSt3__121__thread_specific_ptrINS_15__thread_structEEC2Ev
@@ -1997,14 +1946,14 @@
T _ZNSt3__15ctypeIcE21__classic_lower_tableEv
T _ZNSt3__15ctypeIcE21__classic_upper_tableEv
D _ZNSt3__15ctypeIcE2idE
- T _ZNSt3__15ctypeIcEC1EPKjbj
- T _ZNSt3__15ctypeIcEC2EPKjbj
+ T _ZNSt3__15ctypeIcEC1EPKtbj
+ T _ZNSt3__15ctypeIcEC2EPKtbj
T _ZNSt3__15ctypeIcED0Ev
T _ZNSt3__15ctypeIcED1Ev
T _ZNSt3__15ctypeIcED2Ev
D _ZNSt3__15ctypeIwE2idE
T _ZNSt3__15ctypeIwED0Ev
- ? _ZNSt3__15ctypeIwED1Ev
+ T _ZNSt3__15ctypeIwED1Ev
T _ZNSt3__15ctypeIwED2Ev
T _ZNSt3__15mutex4lockEv
T _ZNSt3__15mutex6unlockEv
@@ -2037,8 +1986,10 @@
W _ZNSt3__16__sortIRNS_6__lessIxxEEPxEEvT0_S5_T_
W _ZNSt3__16__sortIRNS_6__lessIyyEEPyEEvT0_S5_T_
T _ZNSt3__16chrono12steady_clock3nowEv
+ D _ZNSt3__16chrono12steady_clock9is_steadyE
T _ZNSt3__16chrono12system_clock11from_time_tEl
T _ZNSt3__16chrono12system_clock3nowEv
+ D _ZNSt3__16chrono12system_clock9is_steadyE
T _ZNSt3__16chrono12system_clock9to_time_tERKNS0_10time_pointIS1_NS0_8durationIxNS_5ratioILx1ELx1000000EEEEEEE
T _ZNSt3__16futureIvE3getEv
T _ZNSt3__16futureIvEC1EPNS_17__assoc_sub_stateE
@@ -2050,6 +2001,9 @@
T _ZNSt3__16locale2id5__getEv
T _ZNSt3__16locale2id6__initEv
D _ZNSt3__16locale2id9__next_idE
+ D _ZNSt3__16locale3allE
+ D _ZNSt3__16locale4noneE
+ D _ZNSt3__16locale4timeE
T _ZNSt3__16locale5__imp11make_globalEv
C _ZNSt3__16locale5__imp12install_fromINS_10moneypunctIcLb0EEEEEvRKS1_
C _ZNSt3__16locale5__imp12install_fromINS_10moneypunctIcLb1EEEEEvRKS1_
@@ -2057,9 +2011,9 @@
C _ZNSt3__16locale5__imp12install_fromINS_10moneypunctIwLb1EEEEEvRKS1_
C _ZNSt3__16locale5__imp12install_fromINS_5ctypeIcEEEEvRKS1_
C _ZNSt3__16locale5__imp12install_fromINS_5ctypeIwEEEEvRKS1_
+ C _ZNSt3__16locale5__imp12install_fromINS_7codecvtIDic10_mbstate_tEEEEvRKS1_
+ C _ZNSt3__16locale5__imp12install_fromINS_7codecvtIDsc10_mbstate_tEEEEvRKS1_
C _ZNSt3__16locale5__imp12install_fromINS_7codecvtIcc10_mbstate_tEEEEvRKS1_
- C _ZNSt3__16locale5__imp12install_fromINS_7codecvtIjc10_mbstate_tEEEEvRKS1_
- C _ZNSt3__16locale5__imp12install_fromINS_7codecvtItc10_mbstate_tEEEEvRKS1_
C _ZNSt3__16locale5__imp12install_fromINS_7codecvtIwc10_mbstate_tEEEEvRKS1_
C _ZNSt3__16locale5__imp12install_fromINS_7collateIcEEEEvRKS1_
C _ZNSt3__16locale5__imp12install_fromINS_7collateIwEEEEvRKS1_
@@ -2087,9 +2041,9 @@
C _ZNSt3__16locale5__imp7installINS_10moneypunctIwLb1EEEEEvPT_
C _ZNSt3__16locale5__imp7installINS_12ctype_bynameIcEEEEvPT_
C _ZNSt3__16locale5__imp7installINS_12ctype_bynameIwEEEEvPT_
+ C _ZNSt3__16locale5__imp7installINS_14codecvt_bynameIDic10_mbstate_tEEEEvPT_
+ C _ZNSt3__16locale5__imp7installINS_14codecvt_bynameIDsc10_mbstate_tEEEEvPT_
C _ZNSt3__16locale5__imp7installINS_14codecvt_bynameIcc10_mbstate_tEEEEvPT_
- C _ZNSt3__16locale5__imp7installINS_14codecvt_bynameIjc10_mbstate_tEEEEvPT_
- C _ZNSt3__16locale5__imp7installINS_14codecvt_bynameItc10_mbstate_tEEEEvPT_
C _ZNSt3__16locale5__imp7installINS_14codecvt_bynameIwc10_mbstate_tEEEEvPT_
C _ZNSt3__16locale5__imp7installINS_14collate_bynameIcEEEEvPT_
C _ZNSt3__16locale5__imp7installINS_14collate_bynameIwEEEEvPT_
@@ -2107,9 +2061,9 @@
C _ZNSt3__16locale5__imp7installINS_17moneypunct_bynameIwLb1EEEEEvPT_
C _ZNSt3__16locale5__imp7installINS_5ctypeIcEEEEvPT_
C _ZNSt3__16locale5__imp7installINS_5ctypeIwEEEEvPT_
+ C _ZNSt3__16locale5__imp7installINS_7codecvtIDic10_mbstate_tEEEEvPT_
+ C _ZNSt3__16locale5__imp7installINS_7codecvtIDsc10_mbstate_tEEEEvPT_
C _ZNSt3__16locale5__imp7installINS_7codecvtIcc10_mbstate_tEEEEvPT_
- C _ZNSt3__16locale5__imp7installINS_7codecvtIjc10_mbstate_tEEEEvPT_
- C _ZNSt3__16locale5__imp7installINS_7codecvtItc10_mbstate_tEEEEvPT_
C _ZNSt3__16locale5__imp7installINS_7codecvtIwc10_mbstate_tEEEEvPT_
C _ZNSt3__16locale5__imp7installINS_7collateIcEEEEvPT_
C _ZNSt3__16locale5__imp7installINS_7collateIwEEEEvPT_
@@ -2144,13 +2098,18 @@
T _ZNSt3__16locale5__impD0Ev
T _ZNSt3__16locale5__impD1Ev
T _ZNSt3__16locale5__impD2Ev
+ D _ZNSt3__16locale5ctypeE
T _ZNSt3__16locale5facet16__on_zero_sharedEv
T _ZNSt3__16locale5facetD0Ev
T _ZNSt3__16locale5facetD1Ev
T _ZNSt3__16locale5facetD2Ev
T _ZNSt3__16locale6globalERKS0_
T _ZNSt3__16locale7classicEv
+ D _ZNSt3__16locale7collateE
+ D _ZNSt3__16locale7numericE
T _ZNSt3__16locale8__globalEv
+ D _ZNSt3__16locale8messagesE
+ D _ZNSt3__16locale8monetaryE
T _ZNSt3__16localeC1EPKc
T _ZNSt3__16localeC1ERKNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE
T _ZNSt3__16localeC1ERKS0_
@@ -2175,9 +2134,11 @@
T _ZNSt3__16thread6detachEv
T _ZNSt3__16threadD1Ev
T _ZNSt3__16threadD2Ev
+ C _ZNSt3__16vectorINS_4pairIPNS_18condition_variableEPNS_5mutexEEENS_18__hidden_allocatorIS6_EEE21__push_back_slow_pathIS6_EEvOT_
C _ZNSt3__16vectorINS_4pairIPNS_18condition_variableEPNS_5mutexEEENS_18__hidden_allocatorIS6_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS6_RS8_EE
C _ZNSt3__16vectorINS_4pairIPNS_18condition_variableEPNS_5mutexEEENS_18__hidden_allocatorIS6_EEED1Ev
C _ZNSt3__16vectorINS_4pairIPNS_18condition_variableEPNS_5mutexEEENS_18__hidden_allocatorIS6_EEED2Ev
+ C _ZNSt3__16vectorIPNS_17__assoc_sub_stateENS_18__hidden_allocatorIS2_EEE21__push_back_slow_pathIRKS2_EEvOT_
C _ZNSt3__16vectorIPNS_17__assoc_sub_stateENS_18__hidden_allocatorIS2_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS2_RS4_EE
C _ZNSt3__16vectorIPNS_17__assoc_sub_stateENS_18__hidden_allocatorIS2_EEED1Ev
C _ZNSt3__16vectorIPNS_17__assoc_sub_stateENS_18__hidden_allocatorIS2_EEED2Ev
@@ -2185,7 +2146,7 @@
C _ZNSt3__16vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE18__construct_at_endEj
C _ZNSt3__16vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE18__construct_at_endIPS3_EENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_
C _ZNSt3__16vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE
- C _ZNSt3__16vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE6assignIPS3_EENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_
+ C _ZNSt3__16vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE6assignIPS3_EENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIS3_NS_15iterator_traitsISA_E9referenceEEE5valueEvE4typeESA_SA_
C _ZNSt3__16vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE6resizeEj
C _ZNSt3__16vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE8__appendEj
C _ZNSt3__16vectorIPNS_6locale5facetENS_15__sso_allocatorIS3_Lj28EEEE8allocateEj
@@ -2238,18 +2199,18 @@
C _ZNSt3__17__sort5IRNS_6__lessIwwEEPwEEjT0_S5_S5_S5_S5_T_
C _ZNSt3__17__sort5IRNS_6__lessIxxEEPxEEjT0_S5_S5_S5_S5_T_
C _ZNSt3__17__sort5IRNS_6__lessIyyEEPyEEjT0_S5_S5_S5_S5_T_
+ D _ZNSt3__17codecvtIDic10_mbstate_tE2idE
+ T _ZNSt3__17codecvtIDic10_mbstate_tED0Ev
+ T _ZNSt3__17codecvtIDic10_mbstate_tED1Ev
+ T _ZNSt3__17codecvtIDic10_mbstate_tED2Ev
+ D _ZNSt3__17codecvtIDsc10_mbstate_tE2idE
+ T _ZNSt3__17codecvtIDsc10_mbstate_tED0Ev
+ T _ZNSt3__17codecvtIDsc10_mbstate_tED1Ev
+ T _ZNSt3__17codecvtIDsc10_mbstate_tED2Ev
D _ZNSt3__17codecvtIcc10_mbstate_tE2idE
T _ZNSt3__17codecvtIcc10_mbstate_tED0Ev
- ? _ZNSt3__17codecvtIcc10_mbstate_tED1Ev
+ T _ZNSt3__17codecvtIcc10_mbstate_tED1Ev
T _ZNSt3__17codecvtIcc10_mbstate_tED2Ev
- D _ZNSt3__17codecvtIjc10_mbstate_tE2idE
- T _ZNSt3__17codecvtIjc10_mbstate_tED0Ev
- ? _ZNSt3__17codecvtIjc10_mbstate_tED1Ev
- T _ZNSt3__17codecvtIjc10_mbstate_tED2Ev
- D _ZNSt3__17codecvtItc10_mbstate_tE2idE
- T _ZNSt3__17codecvtItc10_mbstate_tED0Ev
- ? _ZNSt3__17codecvtItc10_mbstate_tED1Ev
- T _ZNSt3__17codecvtItc10_mbstate_tED2Ev
D _ZNSt3__17codecvtIwc10_mbstate_tE2idE
T _ZNSt3__17codecvtIwc10_mbstate_tEC1EPKcj
T _ZNSt3__17codecvtIwc10_mbstate_tEC1Ej
@@ -2314,6 +2275,10 @@
T _ZNSt3__18__rs_getEv
C _ZNSt3__18__searchIRNS_11__traits_eqINS_11char_traitsIcEEEEPKcS7_EET0_S8_S8_T1_S9_T_NS_26random_access_iterator_tagESB_
C _ZNSt3__18__searchIRNS_11__traits_eqINS_11char_traitsIwEEEEPKwS7_EET0_S8_S8_T1_S9_T_NS_26random_access_iterator_tagESB_
+ T _ZNSt3__18__sp_mut4lockEv
+ T _ZNSt3__18__sp_mut6unlockEv
+ C _ZNSt3__18__sp_mutC1EPv
+ C _ZNSt3__18__sp_mutC2EPv
D _ZNSt3__18ios_base10floatfieldE
D _ZNSt3__18ios_base10scientificE
D _ZNSt3__18ios_base11adjustfieldE
@@ -2448,6 +2413,7 @@
W _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE3tieEPNS_13basic_ostreamIcS2_EE
W _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE4fillEc
W _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE4initEPNS_15basic_streambufIcS2_EE
+ W _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE4moveEOS3_
W _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE4moveERS3_
W _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE4swapERS3_
W _ZNSt3__19basic_iosIcNS_11char_traitsIcEEE5clearEj
@@ -2467,6 +2433,7 @@
W _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE3tieEPNS_13basic_ostreamIwS2_EE
W _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE4fillEw
W _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE4initEPNS_15basic_streambufIwS2_EE
+ W _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE4moveEOS3_
W _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE4moveERS3_
W _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE4swapERS3_
W _ZNSt3__19basic_iosIwNS_11char_traitsIwEEE5clearEj
@@ -2520,55 +2487,7 @@
T _ZNSt3__19to_stringEm
T _ZNSt3__19to_stringEx
T _ZNSt3__19to_stringEy
- t _ZNSt3__1L10__init_patERNS_10money_base7patternEccc
- t _ZNSt3__1L10init_am_pmEv
- t _ZNSt3__1L10init_weeksEv
- t _ZNSt3__1L11init_monthsEv
- t _ZNSt3__1L11init_wam_pmEv
- t _ZNSt3__1L11init_wweeksEv
- t _ZNSt3__1L12init_wmonthsEv
- t _ZNSt3__1L12ucs2_to_utf8EPKtS1_RS1_PhS3_RS3_mNS_12codecvt_modeE
- t _ZNSt3__1L12ucs4_to_utf8EPKjS1_RS1_PhS3_RS3_mNS_12codecvt_modeE
- t _ZNSt3__1L12utf8_to_ucs2EPKhS1_RS1_PtS3_RS3_mNS_12codecvt_modeE
- t _ZNSt3__1L12utf8_to_ucs4EPKhS1_RS1_PjS3_RS3_mNS_12codecvt_modeE
- t _ZNSt3__1L13utf16_to_utf8EPKjS1_RS1_PhS3_RS3_mNS_12codecvt_modeE
- t _ZNSt3__1L13utf16_to_utf8EPKtS1_RS1_PhS3_RS3_mNS_12codecvt_modeE
- t _ZNSt3__1L13utf8_to_utf16EPKhS1_RS1_PjS3_RS3_mNS_12codecvt_modeE
- t _ZNSt3__1L13utf8_to_utf16EPKhS1_RS1_PtS3_RS3_mNS_12codecvt_modeE
- t _ZNSt3__1L15ucs2_to_utf16beEPKtS1_RS1_PhS3_RS3_mNS_12codecvt_modeE
- t _ZNSt3__1L15ucs2_to_utf16leEPKtS1_RS1_PhS3_RS3_mNS_12codecvt_modeE
- t _ZNSt3__1L15ucs4_to_utf16beEPKjS1_RS1_PhS3_RS3_mNS_12codecvt_modeE
- t _ZNSt3__1L15ucs4_to_utf16leEPKjS1_RS1_PhS3_RS3_mNS_12codecvt_modeE
- t _ZNSt3__1L15utf16be_to_ucs2EPKhS1_RS1_PtS3_RS3_mNS_12codecvt_modeE
- t _ZNSt3__1L15utf16be_to_ucs4EPKhS1_RS1_PjS3_RS3_mNS_12codecvt_modeE
- t _ZNSt3__1L15utf16le_to_ucs2EPKhS1_RS1_PtS3_RS3_mNS_12codecvt_modeE
- t _ZNSt3__1L15utf16le_to_ucs4EPKhS1_RS1_PjS3_RS3_mNS_12codecvt_modeE
- t _ZNSt3__1L19utf8_to_ucs2_lengthEPKhS1_jmNS_12codecvt_modeE
- t _ZNSt3__1L19utf8_to_ucs4_lengthEPKhS1_jmNS_12codecvt_modeE
- t _ZNSt3__1L20utf8_to_utf16_lengthEPKhS1_jmNS_12codecvt_modeE
- t _ZNSt3__1L22make_error_type_stringENS_15regex_constants10error_typeE
- t _ZNSt3__1L22utf16be_to_ucs2_lengthEPKhS1_jmNS_12codecvt_modeE
- t _ZNSt3__1L22utf16be_to_ucs4_lengthEPKhS1_jmNS_12codecvt_modeE
- t _ZNSt3__1L22utf16le_to_ucs2_lengthEPKhS1_jmNS_12codecvt_modeE
- t _ZNSt3__1L22utf16le_to_ucs4_lengthEPKhS1_jmNS_12codecvt_modeE
- d _ZNSt3__1L2cvE
- d _ZNSt3__1L3mutE
- d _ZNSt3__1L5__cinE
- d _ZNSt3__1L6__cerrE
- d _ZNSt3__1L6__coutE
- d _ZNSt3__1L6__wcinE
- d _ZNSt3__1L7__wcerrE
- d _ZNSt3__1L7__wcoutE
- d _ZNSt3__1L8__rs_mutE
W _ZNSt3__1plIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EEPKS6_RKS9_
- T _ZNSt8bad_castC1Ev
- T _ZNSt8bad_castC2Ev
- T _ZNSt8bad_castD0Ev
- T _ZNSt8bad_castD1Ev
- T _ZNSt8bad_castD2Ev
- T _ZNSt9exceptionD0Ev
- T _ZNSt9exceptionD1Ev
- T _ZNSt9exceptionD2Ev
T _ZSt10unexpectedv
T _ZSt13get_terminatev
T _ZSt13set_terminatePFvvE
@@ -2577,7 +2496,6 @@
T _ZSt17current_exceptionv
T _ZSt17rethrow_exceptionSt13exception_ptr
C _ZSt18make_exception_ptrINSt3__112future_errorEESt13exception_ptrT_
- D _ZSt7nothrow
D _ZTCNSt3__110istrstreamE0_NS_13basic_istreamIcNS_11char_traitsIcEEEE
D _ZTCNSt3__110ostrstreamE0_NS_13basic_ostreamIcNS_11char_traitsIcEEEE
W _ZTCNSt3__114basic_iostreamIcNS_11char_traitsIcEEEE0_NS_13basic_istreamIcS2_EE
@@ -2617,24 +2535,24 @@
W _ZTINSt3__113basic_ostreamIcNS_11char_traitsIcEEEE
W _ZTINSt3__113basic_ostreamIwNS_11char_traitsIwEEEE
C _ZTINSt3__113messages_baseE
- D _ZTINSt3__114__codecvt_utf8IjEE
- D _ZTINSt3__114__codecvt_utf8ItEE
+ D _ZTINSt3__114__codecvt_utf8IDiEE
+ D _ZTINSt3__114__codecvt_utf8IDsEE
D _ZTINSt3__114__codecvt_utf8IwEE
C _ZTINSt3__114__num_get_baseE
C _ZTINSt3__114__num_put_baseE
D _ZTINSt3__114__shared_countE
W _ZTINSt3__114basic_iostreamIcNS_11char_traitsIcEEEE
+ W _ZTINSt3__114codecvt_bynameIDic10_mbstate_tEE
+ W _ZTINSt3__114codecvt_bynameIDsc10_mbstate_tEE
W _ZTINSt3__114codecvt_bynameIcc10_mbstate_tEE
- W _ZTINSt3__114codecvt_bynameIjc10_mbstate_tEE
- W _ZTINSt3__114codecvt_bynameItc10_mbstate_tEE
W _ZTINSt3__114codecvt_bynameIwc10_mbstate_tEE
D _ZTINSt3__114collate_bynameIcEE
D _ZTINSt3__114collate_bynameIwEE
D _ZTINSt3__114error_categoryE
- D _ZTINSt3__115__codecvt_utf16IjLb0EEE
- D _ZTINSt3__115__codecvt_utf16IjLb1EEE
- D _ZTINSt3__115__codecvt_utf16ItLb0EEE
- D _ZTINSt3__115__codecvt_utf16ItLb1EEE
+ D _ZTINSt3__115__codecvt_utf16IDiLb0EEE
+ D _ZTINSt3__115__codecvt_utf16IDiLb1EEE
+ D _ZTINSt3__115__codecvt_utf16IDsLb0EEE
+ D _ZTINSt3__115__codecvt_utf16IDsLb1EEE
D _ZTINSt3__115__codecvt_utf16IwLb0EEE
D _ZTINSt3__115__codecvt_utf16IwLb1EEE
C _ZTINSt3__115__time_get_tempIcEE
@@ -2662,8 +2580,8 @@
C _ZTINSt3__118__time_get_storageIwEE
D _ZTINSt3__119__iostream_categoryE
D _ZTINSt3__119__shared_weak_countE
- D _ZTINSt3__120__codecvt_utf8_utf16IjEE
- D _ZTINSt3__120__codecvt_utf8_utf16ItEE
+ D _ZTINSt3__120__codecvt_utf8_utf16IDiEE
+ D _ZTINSt3__120__codecvt_utf8_utf16IDsEE
D _ZTINSt3__120__codecvt_utf8_utf16IwEE
C _ZTINSt3__120__time_get_c_storageIcEE
C _ZTINSt3__120__time_get_c_storageIwEE
@@ -2674,9 +2592,9 @@
D _ZTINSt3__15ctypeIwEE
D _ZTINSt3__16locale5__impE
D _ZTINSt3__16locale5facetE
+ D _ZTINSt3__17codecvtIDic10_mbstate_tEE
+ D _ZTINSt3__17codecvtIDsc10_mbstate_tEE
D _ZTINSt3__17codecvtIcc10_mbstate_tEE
- D _ZTINSt3__17codecvtIjc10_mbstate_tEE
- D _ZTINSt3__17codecvtItc10_mbstate_tEE
D _ZTINSt3__17codecvtIwc10_mbstate_tEE
W _ZTINSt3__17collateIcEE
W _ZTINSt3__17collateIwEE
@@ -2707,7 +2625,6 @@
W _ZTINSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE
D _ZTINSt3__19strstreamE
C _ZTINSt3__19time_baseE
- D _ZTISt10bad_typeid
D _ZTISt11logic_error
D _ZTISt11range_error
D _ZTISt12domain_error
@@ -2719,8 +2636,6 @@
D _ZTISt15underflow_error
D _ZTISt16invalid_argument
D _ZTISt16nested_exception
- D _ZTISt8bad_cast
- D _ZTISt9exception
C _ZTSNSt3__110__stdinbufIcEE
C _ZTSNSt3__110__stdinbufIwEE
C _ZTSNSt3__110__time_getE
@@ -2753,24 +2668,24 @@
W _ZTSNSt3__113basic_ostreamIcNS_11char_traitsIcEEEE
W _ZTSNSt3__113basic_ostreamIwNS_11char_traitsIwEEEE
C _ZTSNSt3__113messages_baseE
- D _ZTSNSt3__114__codecvt_utf8IjEE
- D _ZTSNSt3__114__codecvt_utf8ItEE
+ D _ZTSNSt3__114__codecvt_utf8IDiEE
+ D _ZTSNSt3__114__codecvt_utf8IDsEE
D _ZTSNSt3__114__codecvt_utf8IwEE
C _ZTSNSt3__114__num_get_baseE
C _ZTSNSt3__114__num_put_baseE
D _ZTSNSt3__114__shared_countE
W _ZTSNSt3__114basic_iostreamIcNS_11char_traitsIcEEEE
+ W _ZTSNSt3__114codecvt_bynameIDic10_mbstate_tEE
+ W _ZTSNSt3__114codecvt_bynameIDsc10_mbstate_tEE
W _ZTSNSt3__114codecvt_bynameIcc10_mbstate_tEE
- W _ZTSNSt3__114codecvt_bynameIjc10_mbstate_tEE
- W _ZTSNSt3__114codecvt_bynameItc10_mbstate_tEE
W _ZTSNSt3__114codecvt_bynameIwc10_mbstate_tEE
D _ZTSNSt3__114collate_bynameIcEE
D _ZTSNSt3__114collate_bynameIwEE
D _ZTSNSt3__114error_categoryE
- D _ZTSNSt3__115__codecvt_utf16IjLb0EEE
- D _ZTSNSt3__115__codecvt_utf16IjLb1EEE
- D _ZTSNSt3__115__codecvt_utf16ItLb0EEE
- D _ZTSNSt3__115__codecvt_utf16ItLb1EEE
+ D _ZTSNSt3__115__codecvt_utf16IDiLb0EEE
+ D _ZTSNSt3__115__codecvt_utf16IDiLb1EEE
+ D _ZTSNSt3__115__codecvt_utf16IDsLb0EEE
+ D _ZTSNSt3__115__codecvt_utf16IDsLb1EEE
D _ZTSNSt3__115__codecvt_utf16IwLb0EEE
D _ZTSNSt3__115__codecvt_utf16IwLb1EEE
C _ZTSNSt3__115__time_get_tempIcEE
@@ -2798,8 +2713,8 @@
C _ZTSNSt3__118__time_get_storageIwEE
D _ZTSNSt3__119__iostream_categoryE
D _ZTSNSt3__119__shared_weak_countE
- D _ZTSNSt3__120__codecvt_utf8_utf16IjEE
- D _ZTSNSt3__120__codecvt_utf8_utf16ItEE
+ D _ZTSNSt3__120__codecvt_utf8_utf16IDiEE
+ D _ZTSNSt3__120__codecvt_utf8_utf16IDsEE
D _ZTSNSt3__120__codecvt_utf8_utf16IwEE
C _ZTSNSt3__120__time_get_c_storageIcEE
C _ZTSNSt3__120__time_get_c_storageIwEE
@@ -2810,9 +2725,9 @@
D _ZTSNSt3__15ctypeIwEE
D _ZTSNSt3__16locale5__impE
D _ZTSNSt3__16locale5facetE
+ D _ZTSNSt3__17codecvtIDic10_mbstate_tEE
+ D _ZTSNSt3__17codecvtIDsc10_mbstate_tEE
D _ZTSNSt3__17codecvtIcc10_mbstate_tEE
- D _ZTSNSt3__17codecvtIjc10_mbstate_tEE
- D _ZTSNSt3__17codecvtItc10_mbstate_tEE
D _ZTSNSt3__17codecvtIwc10_mbstate_tEE
W _ZTSNSt3__17collateIcEE
W _ZTSNSt3__17collateIwEE
@@ -2843,7 +2758,6 @@
W _ZTSNSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE
D _ZTSNSt3__19strstreamE
C _ZTSNSt3__19time_baseE
- D _ZTSSt10bad_typeid
D _ZTSSt11logic_error
D _ZTSSt11range_error
D _ZTSSt12domain_error
@@ -2855,8 +2769,6 @@
D _ZTSSt15underflow_error
D _ZTSSt16invalid_argument
D _ZTSSt16nested_exception
- D _ZTSSt8bad_cast
- D _ZTSSt9exception
D _ZTTNSt3__110istrstreamE
D _ZTTNSt3__110ostrstreamE
W _ZTTNSt3__113basic_istreamIcNS_11char_traitsIcEEEE
@@ -2887,22 +2799,22 @@
W _ZTVNSt3__113basic_istreamIwNS_11char_traitsIwEEEE
W _ZTVNSt3__113basic_ostreamIcNS_11char_traitsIcEEEE
W _ZTVNSt3__113basic_ostreamIwNS_11char_traitsIwEEEE
- D _ZTVNSt3__114__codecvt_utf8IjEE
- D _ZTVNSt3__114__codecvt_utf8ItEE
+ D _ZTVNSt3__114__codecvt_utf8IDiEE
+ D _ZTVNSt3__114__codecvt_utf8IDsEE
D _ZTVNSt3__114__codecvt_utf8IwEE
D _ZTVNSt3__114__shared_countE
W _ZTVNSt3__114basic_iostreamIcNS_11char_traitsIcEEEE
+ W _ZTVNSt3__114codecvt_bynameIDic10_mbstate_tEE
+ W _ZTVNSt3__114codecvt_bynameIDsc10_mbstate_tEE
W _ZTVNSt3__114codecvt_bynameIcc10_mbstate_tEE
- W _ZTVNSt3__114codecvt_bynameIjc10_mbstate_tEE
- W _ZTVNSt3__114codecvt_bynameItc10_mbstate_tEE
W _ZTVNSt3__114codecvt_bynameIwc10_mbstate_tEE
D _ZTVNSt3__114collate_bynameIcEE
D _ZTVNSt3__114collate_bynameIwEE
D _ZTVNSt3__114error_categoryE
- D _ZTVNSt3__115__codecvt_utf16IjLb0EEE
- D _ZTVNSt3__115__codecvt_utf16IjLb1EEE
- D _ZTVNSt3__115__codecvt_utf16ItLb0EEE
- D _ZTVNSt3__115__codecvt_utf16ItLb1EEE
+ D _ZTVNSt3__115__codecvt_utf16IDiLb0EEE
+ D _ZTVNSt3__115__codecvt_utf16IDiLb1EEE
+ D _ZTVNSt3__115__codecvt_utf16IDsLb0EEE
+ D _ZTVNSt3__115__codecvt_utf16IDsLb1EEE
D _ZTVNSt3__115__codecvt_utf16IwLb0EEE
D _ZTVNSt3__115__codecvt_utf16IwLb1EEE
C _ZTVNSt3__115__time_get_tempIcEE
@@ -2928,8 +2840,8 @@
W _ZTVNSt3__117moneypunct_bynameIwLb1EEE
D _ZTVNSt3__119__iostream_categoryE
D _ZTVNSt3__119__shared_weak_countE
- D _ZTVNSt3__120__codecvt_utf8_utf16IjEE
- D _ZTVNSt3__120__codecvt_utf8_utf16ItEE
+ D _ZTVNSt3__120__codecvt_utf8_utf16IDiEE
+ D _ZTVNSt3__120__codecvt_utf8_utf16IDsEE
D _ZTVNSt3__120__codecvt_utf8_utf16IwEE
C _ZTVNSt3__120__time_get_c_storageIcEE
C _ZTVNSt3__120__time_get_c_storageIwEE
@@ -2940,9 +2852,9 @@
D _ZTVNSt3__15ctypeIwEE
D _ZTVNSt3__16locale5__impE
D _ZTVNSt3__16locale5facetE
+ D _ZTVNSt3__17codecvtIDic10_mbstate_tEE
+ D _ZTVNSt3__17codecvtIDsc10_mbstate_tEE
D _ZTVNSt3__17codecvtIcc10_mbstate_tEE
- D _ZTVNSt3__17codecvtIjc10_mbstate_tEE
- D _ZTVNSt3__17codecvtItc10_mbstate_tEE
D _ZTVNSt3__17codecvtIwc10_mbstate_tEE
W _ZTVNSt3__17collateIcEE
W _ZTVNSt3__17collateIwEE
@@ -2968,7 +2880,6 @@
W _ZTVNSt3__19money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEE
W _ZTVNSt3__19money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEE
D _ZTVNSt3__19strstreamE
- D _ZTVSt10bad_typeid
D _ZTVSt11logic_error
D _ZTVSt11range_error
D _ZTVSt12domain_error
@@ -2980,8 +2891,6 @@
D _ZTVSt15underflow_error
D _ZTVSt16invalid_argument
D _ZTVSt16nested_exception
- D _ZTVSt8bad_cast
- D _ZTVSt9exception
W _ZThn8_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3__XEv
W _ZThn8_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3__cEv
W _ZThn8_NKSt3__115time_get_bynameIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE3__rEv
@@ -3016,82 +2925,3 @@
W _ZTv0_n12_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED1Ev
T _ZTv0_n12_NSt3__19strstreamD0Ev
T _ZTv0_n12_NSt3__19strstreamD1Ev
- d _ZZNKSt3__120__time_get_c_storageIcE3__XEvE1s
- d _ZZNKSt3__120__time_get_c_storageIcE3__cEvE1s
- d _ZZNKSt3__120__time_get_c_storageIcE3__rEvE1s
- d _ZZNKSt3__120__time_get_c_storageIcE3__xEvE1s
- d _ZZNKSt3__120__time_get_c_storageIcE7__am_pmEvE5am_pm
- d _ZZNKSt3__120__time_get_c_storageIcE7__weeksEvE5weeks
- d _ZZNKSt3__120__time_get_c_storageIcE8__monthsEvE6months
- d _ZZNKSt3__120__time_get_c_storageIwE3__XEvE1s
- d _ZZNKSt3__120__time_get_c_storageIwE3__cEvE1s
- d _ZZNKSt3__120__time_get_c_storageIwE3__rEvE1s
- d _ZZNKSt3__120__time_get_c_storageIwE3__xEvE1s
- d _ZZNKSt3__120__time_get_c_storageIwE7__am_pmEvE5am_pm
- d _ZZNKSt3__120__time_get_c_storageIwE7__weeksEvE5weeks
- d _ZZNKSt3__120__time_get_c_storageIwE8__monthsEvE6months
- d _ZZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE11do_get_timeES4_S4_RNS_8ios_baseERjP2tmE5__fmt
- d _ZZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE5__fmt
- d _ZZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE5__fmt11
- d _ZZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE5__fmt12
- d _ZZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE5__fmt13
- d _ZZNKSt3__18time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE5__fmt14
- d _ZZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE11do_get_timeES4_S4_RNS_8ios_baseERjP2tmE5__fmt
- d _ZZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE5__fmt
- d _ZZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE5__fmt16
- d _ZZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE5__fmt17
- d _ZZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE5__fmt18
- d _ZZNKSt3__18time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_RNS_8ios_baseERjP2tmccE5__fmt19
- d _ZZNKSt3__19money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_getES4_S4_bRNS_8ios_baseERjReE5__src
- d _ZZNKSt3__19money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEE6do_getES4_S4_bRNS_8ios_baseERjReE5__src
- d _ZZNSt3__112_GLOBAL__N_13mutEvE1m
- d _ZZNSt3__112_GLOBAL__N_14makeINS_10moneypunctIcLb0EEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_10moneypunctIcLb1EEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_10moneypunctIwLb0EEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_10moneypunctIwLb1EEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_5ctypeIcEEPjbiEERT_T0_T1_T2_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_5ctypeIwEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_6locale5__impEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_7codecvtIcc10_mbstate_tEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_7codecvtIjc10_mbstate_tEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_7codecvtItc10_mbstate_tEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_7codecvtIwc10_mbstate_tEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_7collateIcEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_7collateIwEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_7num_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_7num_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_7num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_7num_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_8messagesIcEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_8messagesIwEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_8numpunctIcEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_8numpunctIwEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_8time_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_8time_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_8time_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_8time_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_9money_getIcNS_19istreambuf_iteratorIcNS_11char_traitsIcEEEEEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_9money_getIwNS_19istreambuf_iteratorIwNS_11char_traitsIwEEEEEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_9money_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEEEiEERT_T0_E3buf
- d _ZZNSt3__112_GLOBAL__N_14makeINS_9money_putIwNS_19ostreambuf_iteratorIwNS_11char_traitsIwEEEEEEiEERT_T0_E3buf
- d _ZZNSt3__112__rs_defaultclEvE6__rs_g
- d _ZZNSt3__115future_categoryEvE3__f
- d _ZZNSt3__115system_categoryEvE1s
- d _ZZNSt3__116generic_categoryEvE1s
- d _ZZNSt3__117iostream_categoryEvE1s
- d _ZZNSt3__119__thread_local_dataEvE3__p
- d _ZZNSt3__16__clocEvE6result
- d _ZZNSt3__16locale5__imp11make_globalEvE3buf
- d _ZZNSt3__16locale5__imp12make_classicEvE3buf
- d _ZZNSt3__16locale7classicEvE1c
- d _ZZNSt3__16locale8__globalEvE1g
- d _ZZNSt3__18__get_dbEvE2db
- d _ZZNSt3__18ios_base15sync_with_stdioEbE14previous_state
- d _ZZNSt3__18ios_base5iwordEiE5error
- d _ZZNSt3__18ios_base5pwordEiE5error
- d _ZZNSt3__1L10init_am_pmEvE5am_pm
- d _ZZNSt3__1L10init_weeksEvE5weeks
- d _ZZNSt3__1L11init_monthsEvE6months
- d _ZZNSt3__1L11init_wam_pmEvE5am_pm
- d _ZZNSt3__1L11init_wweeksEvE5weeks
- d _ZZNSt3__1L12init_wmonthsEvE6months
diff --git a/system/lib/libcxx/thread.cpp b/system/lib/libcxx/thread.cpp
index b07f8f85..76af3d0c 100644
--- a/system/lib/libcxx/thread.cpp
+++ b/system/lib/libcxx/thread.cpp
@@ -11,10 +11,15 @@
#include "exception"
#include "vector"
#include "future"
+#include "limits"
#include <sys/types.h>
-#if !_WIN32
+#if !defined(_WIN32)
+#if !defined(__sun__) && !defined(__linux__)
#include <sys/sysctl.h>
-#endif // _WIN32
+#else
+#include <unistd.h>
+#endif // !__sun__ && !__linux__
+#endif // !_WIN32
_LIBCPP_BEGIN_NAMESPACE_STD
@@ -52,14 +57,23 @@ thread::detach()
}
unsigned
-thread::hardware_concurrency()
+thread::hardware_concurrency() _NOEXCEPT
{
#if defined(CTL_HW) && defined(HW_NCPU)
- int n;
+ unsigned n;
int mib[2] = {CTL_HW, HW_NCPU};
std::size_t s = sizeof(n);
sysctl(mib, 2, &n, &s, 0, 0);
return n;
+#elif (defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L) && defined(_SC_NPROCESSORS_ONLN)) || defined(EMSCRIPTEN)
+ long result = sysconf(_SC_NPROCESSORS_ONLN);
+ // sysconf returns -1 if the name is invalid, the option does not exist or
+ // does not have a definite limit.
+ // if sysconf returns some other negative number, we have no idea
+ // what is going on. Default to something safe.
+ if (result < 0)
+ return 0;
+ return static_cast<unsigned>(result);
#else // defined(CTL_HW) && defined(HW_NCPU)
// TODO: grovel through /proc or check cpuid on x86 and similar
// instructions on other architectures.
@@ -74,11 +88,22 @@ void
sleep_for(const chrono::nanoseconds& ns)
{
using namespace chrono;
- if (ns >= nanoseconds::zero())
+ if (ns > nanoseconds::zero())
{
+ seconds s = duration_cast<seconds>(ns);
timespec ts;
- ts.tv_sec = static_cast<decltype(ts.tv_sec)>(duration_cast<seconds>(ns).count());
- ts.tv_nsec = static_cast<decltype(ts.tv_nsec)>((ns - seconds(ts.tv_sec)).count());
+ typedef decltype(ts.tv_sec) ts_sec;
+ _LIBCPP_CONSTEXPR ts_sec ts_sec_max = numeric_limits<ts_sec>::max();
+ if (s.count() < ts_sec_max)
+ {
+ ts.tv_sec = static_cast<ts_sec>(s.count());
+ ts.tv_nsec = static_cast<decltype(ts.tv_nsec)>((ns-s).count());
+ }
+ else
+ {
+ ts.tv_sec = ts_sec_max;
+ ts.tv_nsec = giga::num - 1;
+ }
nanosleep(&ts, 0);
}
}
diff --git a/system/lib/libcxx/typeinfo.cpp b/system/lib/libcxx/typeinfo.cpp
index 9ca03a18..7b47d741 100644
--- a/system/lib/libcxx/typeinfo.cpp
+++ b/system/lib/libcxx/typeinfo.cpp
@@ -7,12 +7,21 @@
//
//===----------------------------------------------------------------------===//
#include <stdlib.h>
-#if __APPLE__
+
+#ifndef __has_include
+#define __has_include(inc) 0
+#endif
+
+#ifdef __APPLE__
+#include <cxxabi.h>
+#elif defined(LIBCXXRT) || __has_include(<cxxabi.h>)
#include <cxxabi.h>
#endif
#include "typeinfo"
+#if !(defined(_LIBCPPABI_VERSION) || defined(LIBCXXRT))
+
std::bad_cast::bad_cast() _NOEXCEPT
{
}
@@ -41,10 +50,11 @@ std::bad_typeid::what() const _NOEXCEPT
return "std::bad_typeid";
}
-#if __APPLE__
+#ifdef __APPLE__
// On Darwin, the cxa_bad_* functions cannot be in the lower level library
// because bad_cast and bad_typeid are defined in his higher level library
void __cxxabiv1::__cxa_bad_typeid() { throw std::bad_typeid(); }
void __cxxabiv1::__cxa_bad_cast() { throw std::bad_cast(); }
#endif
+#endif // _LIBCPPABI_VERSION
diff --git a/system/lib/libcxx/utility.cpp b/system/lib/libcxx/utility.cpp
index 7dccffb7..e9830e7c 100644
--- a/system/lib/libcxx/utility.cpp
+++ b/system/lib/libcxx/utility.cpp
@@ -7,6 +7,7 @@
//
//===----------------------------------------------------------------------===//
+#define _LIBCPP_BUILDING_UTILITY
#include "utility"
_LIBCPP_BEGIN_NAMESPACE_STD