Make support for thread-unsafe C functions optional.
One of the aspects of CloudABI is that it aims to help you write code that is thread-safe out of the box. This is very important if you want to write libraries that are easy to reuse. For CloudABI we decided to not provide the thread-unsafe functions. So far this is working out pretty well, as thread-unsafety issues are detected really early on. The following patch adds a knob to libc++, _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS, that can be set to disable thread-unsafe functions that can easily be avoided in practice. The following functions are not thread-safe: - <clocale>: locale handles should be preferred over setlocale(). - <cstdlib>: mbrlen(), mbrtowc() and wcrtomb() should be preferred over their non-restartable counterparts. - <ctime>: asctime(), ctime(), gmtime() and localtime() are not thread-safe. The first two are also deprecated by POSIX. Differential Revision: http://reviews.llvm.org/D8703 Reviewed by: marshall git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@240527 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -46,7 +46,9 @@ int main()
|
||||
static_assert((std::is_same<decltype(std::strspn(cpc, cpc)), std::size_t>::value), "");
|
||||
// static_assert((std::is_same<decltype(std::strstr(cpc, cpc)), const char*>::value), "");
|
||||
static_assert((std::is_same<decltype(std::strstr(cp, cpc)), char*>::value), "");
|
||||
#ifndef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS
|
||||
static_assert((std::is_same<decltype(std::strtok(cp, cpc)), char*>::value), "");
|
||||
#endif
|
||||
static_assert((std::is_same<decltype(std::memset(vp, 0, s)), void*>::value), "");
|
||||
static_assert((std::is_same<decltype(std::strerror(0)), char*>::value), "");
|
||||
static_assert((std::is_same<decltype(std::strlen(cpc)), std::size_t>::value), "");
|
||||
|
Reference in New Issue
Block a user