Commit Graph

248 Commits

Author SHA1 Message Date
Eric Fiselier
22b131ffdd Partial fix for building w/ libcxxrt on OSX. Patch from C Bergstrom.
llvm-svn: 221029
2014-11-01 00:41:42 +00:00
Eric Fiselier
1d558b84ef libcxxrt defines bad_array_new_length::what() so move that into a conditional compilation block
llvm-svn: 221025
2014-11-01 00:11:25 +00:00
Eric Fiselier
fd465fe5b5 libcxxrt now implements bad_array_new_length and need to gaurd against multiple defines. Patch from Baptiste Daroussin.
llvm-svn: 220882
2014-10-29 23:14:53 +00:00
Marshall Clow
a5027324ec PR #21321 talked about implementation-defined behavior of realloc. I poo-poohed it, and was wrong. Fix the call in <locale>. Review the others, refactored some duplicated code, and found overflow bugs (and __event_cap_ was never getting updated, either).
llvm-svn: 220702
2014-10-27 19:08:10 +00:00
Jonathan Roelofs
afe6794bc2 Address some post-commit review comments on r217261
llvm-svn: 217276
2014-09-05 20:28:44 +00:00
Jonathan Roelofs
b3fcc67f8f Allow libc++ to be built on systems without POSIX threads
If you're crazy enough to want this sort of thing, then add
-D_LIBCPP_HAS_NO_THREADS to your CXXFLAGS and
--param=additiona_features=libcpp-has-no-threads to your lit commnad line.

http://reviews.llvm.org/D3969

llvm-svn: 217271
2014-09-05 19:45:05 +00:00
Jonathan Roelofs
ffa0895c3b Fix comment that was obsoleted by r216949
llvm-svn: 216999
2014-09-02 23:52:46 +00:00
Jonathan Roelofs
c59e585126 Partially address a FIXME in steady_clock::now()
http://reviews.llvm.org/D4045

llvm-svn: 216949
2014-09-02 21:14:38 +00:00
Jonathan Roelofs
a409d59cf5 Newlib names ELAST differently than linux
llvm-svn: 216943
2014-09-02 20:34:23 +00:00
Jonathan Roelofs
16bb38907c Revert r216497: "[libcxx] Fix ctype_byname<wchar_t>::do_is() mask checking."
After discussing implementing more tests for this with @danalbert & @mclow, I
realized this change is not correct.

The C++ standard requires do_is() to behave as if it were a loop that checked
is(). Furthermore, it requires is() to check "The first form returns the result
of the expression (M & m) != 0; i.e., true if the character has the
characteristics specified"... which the reverted patch definitely does not
conform to. Even further, furthermore, this requires that ctype's mask be an
actual bitmask, unlike what android and newlib provide for _ctype_.

Fixing the original bug that instigated this patch remains TBD.

llvm-svn: 216508
2014-08-27 00:39:47 +00:00
Jonathan Roelofs
67d629889e [libcxx] Fix ctype_byname<wchar_t>::do_is() mask checking.
This patch: http://reviews.llvm.org/D5081
Original patch: http://reviews.llvm.org/D5071 (from @danalbert)

llvm-svn: 216497
2014-08-26 22:29:00 +00:00
Justin Bogner
d2308ea5fd Revert "Turn off extern templates for most uses."
Turning off explicit template instantiation leads to a pretty
significant build time and code size cost. We're better off dealing
with ABI incompatibility issues that come up in a less heavy handed
way.

This reverts commit r189610.

llvm-svn: 215740
2014-08-15 17:58:56 +00:00
Dan Albert
ea32c105a6 Make Android's ctype_base::mask unsigned.
Keeping the regex code sane is much easier if we match the other
platforms and use an unsigned mask.

llvm-svn: 214442
2014-07-31 21:04:08 +00:00
Dan Albert
15c010a37e Base regex code on char_class_type.
__get_classname() and __bracket_expression were assuming that
char_class_type was ctype_base::mask rather than using
regex_traits<_CharT>::char_class_type.

This change allows char_class_type to be defined to something other than
ctype_base::mask so that the implementation will still work for
platforms with an 8-bit ctype mask (such as Android and OpenBSD).

llvm-svn: 214201
2014-07-29 19:23:39 +00:00
Dan Albert
4339903c94 Fix classic_locale for Android.
Android's classic_locale begins at _ctype_ + 1.

llvm-svn: 213672
2014-07-22 17:32:56 +00:00
Marshall Clow
b38f8f07c5 Add support for BIONIC C library (Android). Patch from Dan Albert
llvm-svn: 212724
2014-07-10 15:20:28 +00:00
David Majnemer
58a0a70fb2 Handle partial nanosleeps in this_thread::sleep_for
Signals may result in nanosleep returning with only some of the
requested sleeping performed.

Utilize nanosleep's "time-remaining" out parameter to continue sleeping
when this occurs.

llvm-svn: 210210
2014-06-04 19:43:20 +00:00
David Majnemer
2dfdfdf45c [libc++] Don't return uninitialized data from random_device::operator()
Make sure we appropriately retry calls to read if the return result is
less than what we asked for.

Additionally, check and handle IO errors: EINTR results in the read
operation getting restarted; other errors turn into exceptions.

llvm-svn: 210061
2014-06-03 02:40:39 +00:00
David Majnemer
1e9592a9c7 [libc++] random_device fails if open returns zero
random_device::random_device(const string&) wrongly assumes that open
can only validly return a file descriptor greater than zero.

This results in random_device believing that it didn't successfully open
the device causing it to throw in it's constructor, this ends up leaking
a file descriptor.

The fix is simple, don't error on file descriptors which are zero.

llvm-svn: 210060
2014-06-03 02:21:37 +00:00
David Majnemer
31234844ef Linux: Correctly identify valid error codes
[syserr.errcat.objects]p4 specifies that
system_category().default_error_condition(ev) map to
error_condition(posv, generic_category()) if ev could map to a POSIX
errno.

Linux reserves up to and including 4095 for errno values, use this as a
bound.

This fixes syserr.errcat.objects/system_category.pass.cpp on Linux.

llvm-svn: 209795
2014-05-29 05:02:22 +00:00
Alp Toker
f03763a44b Fix typos
llvm-svn: 208869
2014-05-15 11:27:39 +00:00
Joerg Sonnenberger
a1fbf3459f Exceptions store the message as reference counted string for
compatibility to libstdc++. Move the implementation into a header for
easier sharing with libc++abi. Merge a number of improvements from that
version. Provide a POD definition for <stdexcept>'s public use to avoid
cast dances. Discussed with Marshall Clow.

llvm-svn: 207695
2014-04-30 19:54:11 +00:00
Marshall Clow
1641a7c1cb Implement LWG issue #2135. If something goes wrong in condition_variable::wait, call terminate() rather than throwing an error. Do this indirectly, by marking the call as 'noexcept'. This is better than just calling terminate() directly, because it gives a better error message on the console.
llvm-svn: 204778
2014-03-26 02:45:04 +00:00
David Majnemer
7ec93f9b1c Implement N3891: A proposal to rename shared_mutex to shared_timed_mutex
This is as straightforward as it sounds, a renamed from shared_mutex to
shared_timed_mutex.

Note that libcxx .dylib and .so files built with c++14 support need to
be rebuilt.

llvm-svn: 204078
2014-03-17 20:19:44 +00:00
David Majnemer
2fd6f512e5 Replace a tab with a space
llvm-svn: 204077
2014-03-17 20:13:54 +00:00
Alp Toker
5fea974b6b Adjust build fix from r199494 to use C++ casts
Change suggested by Joerg Sonnenberger!

llvm-svn: 199500
2014-01-17 16:17:24 +00:00
Alp Toker
0b438a9f63 Build fix for gcc builtin
The __sync_add_and_fetch() builtin parameter is volatile but clang has
'different' type checking and ends up accepting this code.

Undo the C++ cast from r198505 to get libc++/LLVM building with g++ while this
is investigated.

llvm-svn: 199494
2014-01-17 14:24:23 +00:00
Marshall Clow
354d39cabc Add license headers to a bunch of libc++ files that were missing them. No functionality change. Fixes 18291. Thanks to Nico for the bug report and the patch.
llvm-svn: 199400
2014-01-16 16:58:45 +00:00
Joerg Sonnenberger
70d4ba7f19 Replace casts of __impl_ with the correct reinterpret_cast of the
address. Restores the assembly of before r198504.

llvm-svn: 198698
2014-01-07 19:21:13 +00:00
Joerg Sonnenberger
634b9dd768 Switch to using C++ style casts.
llvm-svn: 198505
2014-01-04 17:43:00 +00:00
Logan Chien
b0d5be563b Fix GCC unknown pragma warning in libc++.
We should check defined(__clang__) before the usage of the
clang diagnostic pragmas.

The [-Wswitch] warning in src/future.cpp should be ignored.
As the result, the equivalent GCC pragma is added.

llvm-svn: 197314
2013-12-14 06:45:09 +00:00
Marshall Clow
028875aa7c Patch by Xing Xue to improve libc++ support for AIX
llvm-svn: 195144
2013-11-19 19:16:03 +00:00
Marshall Clow
7e1ea8d288 Patch by Bruce Mitchener. Change all references to EMSCRIPTEN to __EMSCRIPTEN__. If you're not using the PP symbol EMSCRIPTEN, then you should see no functionality change.
llvm-svn: 195136
2013-11-19 18:05:03 +00:00
Yaron Keren
f16f037060 G M suggestion: conditionally include files on _WIN32.
llvm-svn: 195045
2013-11-18 21:30:19 +00:00
Yaron Keren
fbeb63c0d1 This patch implements snprintf_l function in a way similar to the other
functions in src/support/win32/locale_win32.cpp and locale_win32.h, 
calling upon vsnprintf for which there is a MingW correct alternative.

Note! __USE_MINGW_ANSI_STDIO is not modified in this patch. In order to 
use the __mingw version it must be defined before including the MingW 
headers.

llvm-svn: 195044
2013-11-18 21:12:14 +00:00
Marshall Clow
dfdac03c8f Move <optional> into include/experimental, and into the std::experimental namespace, since it's not part of C++14, but of an upcoming TS
llvm-svn: 194867
2013-11-15 22:42:10 +00:00
Marshall Clow
c1cf981823 Patch from Bruce Mitchener; fixes two typos in comments. No functionality change. PR17843
llvm-svn: 194432
2013-11-11 23:27:19 +00:00
Marshall Clow
520469cfc0 Patch from GM: locale.cpp; make implicit conversions to bool explicit, fix some 'unknown pragma' warnings when compiling under MSVC, and don't use the __sso_allocator under windows, b/c MSVC doesn't support aligned-by value parameters
llvm-svn: 193086
2013-10-21 15:07:28 +00:00
Marshall Clow
9f21325ac7 Patch from GM to make more implicit bools explicit since we can't stop MSVC warning about this in headers and to warn is the MSVC default. No functionality change.
llvm-svn: 192548
2013-10-13 01:02:45 +00:00
Marshall Clow
c3776b1ce0 LWG Issue 2087: iostream_category() and noexcept
llvm-svn: 192545
2013-10-12 22:49:56 +00:00
Marshall Clow
f28fd284f8 LWG issue 2143: ios_base::xalloc should be thread-safe
llvm-svn: 192539
2013-10-12 19:13:52 +00:00
Marshall Clow
0354b92992 patch by Yaron: Uses rand_s() from stdlib.h (when building for Windows)
llvm-svn: 192325
2013-10-09 21:49:03 +00:00
Peter Collingbourne
8b9c5d1ac7 Silence the unused function warning in exception.cpp.
Rather than try to protect the function behind a precise,
ever-changing #if expression, just inline it into every caller.

llvm-svn: 192077
2013-10-06 22:13:24 +00:00
Peter Collingbourne
3b5d969293 Implement std::exception_ptr under libsupc++.
libsupc++ does not implement the dependent EH ABI and the
functionality it uses to implement std::exception_ptr (which it
declares as an alias of std::__exception_ptr::exception_ptr) is not
directly exported to clients. So we have little choice but to hijack
std::__exception_ptr::exception_ptr's (which fortunately has the
same layout as our std::exception_ptr) copy constructor, assignment
operator and destructor (which are part of its stable ABI), and its
rethrow_exception(std::__exception_ptr::exception_ptr) function.

Also, remove some out of date comments.

Differential Revision: http://llvm-reviews.chandlerc.com/D1826

llvm-svn: 192076
2013-10-06 22:13:21 +00:00
Peter Collingbourne
26dd09e57f Make it possible to link against libstdc++ as well as libsupc++ with CMake.
Linking against libstdc++, rather than libsupc++, is probably better
for people who need to link against clients of libstdc++.  Because
libsupc++ is provided only as a static library, its globals are not
shared between the static library and the copy linked into libstdc++.
This has been found to cause at least one test failure.

This also removes a number of symbols which were multiply defined
between libstdc++ and libc++, only when linking with libstdc++.

Differential Revision: http://llvm-reviews.chandlerc.com/D1825

llvm-svn: 192075
2013-10-06 22:13:19 +00:00
Peter Collingbourne
926aa5f4f2 Eliminate more symbols multiply defined between libsupc++ and libc++.
The remaining multiple definitions were flushed out by attempting to
link libsupc++ and libc++ into the same executable with --whole-archive,
e.g.

clang++ -I../llvm/projects/libcxx/include -nodefaultlibs -Wl,--whole-archive lib/libc++.a /usr/lib/gcc/x86_64-linux-gnu/4.6/libsupc++.a -Wl,--no-whole-archive -lgcc -lgcc_s -lc -lpthread -lrt

(The same technique was used to flush out multiple definitions in
libstdc++.)

Differential Revision: http://llvm-reviews.chandlerc.com/D1824

llvm-svn: 192074
2013-10-06 22:13:16 +00:00
Howard Hinnant
32f9a776fb Use _LIBCPP_NEW_DELETE_VIS instead of LIBCPP_FUNC_VIS in src/new.cpp.
llvm-svn: 192071
2013-10-06 20:53:24 +00:00
Howard Hinnant
a942f2ffd7 G M: The attached patch is for libcxx's new.cpp and __config files. The patch's intent is to make new.cpp compile using MS's cl.exe compiler without changing the meaning of anything for any other compiler.
The issue this patch seeks to address is that MS's compiler (cl.exe) doesn't support the __attribute__((__weak__)) or __atribute__((__visibility__("default")) syntax; so a solution must be found where cl.exe doesn't see this syntax.

This patch seeks to solve this problem by changing code patterned like this:
__attribute__((__weak__, __visibility__("default")))
void* operator new(size_t size, const std::nothrow_t&) _NOEXCEPT { /*snip*/; return p; }

to code like this:
_LIBCPP_WEAK
void* operator new(size_t size, const std::nothrow_t&) _NOEXCEPT { return p; }

Howard:  Thanks for all the comments regarding the default visibility
tag on the definition.  I agree it isn't needed, and that there are lots
of other places where it is missing.  That being said, I'm not wanting
to rock the boat on that issue right now.  So I've added it back to the
definition via _LIBCPP_FUNC_VIS.  A later pass dedicated just to this
issue can bring things in to a consistent state one way or the other. 
Note that we do not want to have the exact same attributes on the
declaration and defintion in this case.  The declaration should not be
marked weak, whereas the definition should (which is what G M's patch
did). I've fully tested on OS X to ensure that the resultant attribute
syntax actually works.

llvm-svn: 192007
2013-10-04 23:56:37 +00:00
Howard Hinnant
79710108a4 G M: A small patch to fix a couple of warnings in stdexcept.cpp for cl.exe which does not support #pragma visibility.
llvm-svn: 191988
2013-10-04 22:12:59 +00:00
Howard Hinnant
80b84d4c26 G M: Provides the _LIBCPP_WARNING macro, to be used for MSVC only, since that compiler doesn't support #warning.
llvm-svn: 191980
2013-10-04 21:14:44 +00:00