Make support for thread-unsafe C functions optional.
authorEd Schouten <ed@nuxi.nl>
Wed, 24 Jun 2015 08:44:38 +0000 (08:44 +0000)
committerEd Schouten <ed@nuxi.nl>
Wed, 24 Jun 2015 08:44:38 +0000 (08:44 +0000)
commite0cf3b9a3ca8d80d313d1e2e5b8c70d73d10e933
tree9141a10ef3fbd7899b821275956fda61b01da73d
parentaa315fbb4c18b0bfcd54658f3f5b67600f097f8c
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

llvm-svn: 240527
19 files changed:
libcxx/CMakeLists.txt
libcxx/include/__config
libcxx/include/clocale
libcxx/include/cstdlib
libcxx/include/cstring
libcxx/include/ctime
libcxx/test/CMakeLists.txt
libcxx/test/libcxx/test/config.py
libcxx/test/lit.site.cfg.in
libcxx/test/std/depr/depr.c.headers/stdlib_h.pass.cpp
libcxx/test/std/depr/depr.c.headers/string_h.pass.cpp
libcxx/test/std/language.support/support.runtime/cstdlib.pass.cpp
libcxx/test/std/language.support/support.runtime/ctime.pass.cpp
libcxx/test/std/localization/c.locales/clocale.pass.cpp
libcxx/test/std/strings/c.strings/cstring.pass.cpp
libcxx/test/std/utilities/date.time/asctime.thread-unsafe.fail.cpp [new file with mode: 0644]
libcxx/test/std/utilities/date.time/ctime.thread-unsafe.fail.cpp [new file with mode: 0644]
libcxx/test/std/utilities/date.time/gmtime.thread-unsafe.fail.cpp [new file with mode: 0644]
libcxx/test/std/utilities/date.time/localtime.thread-unsafe.fail.cpp [new file with mode: 0644]