Commit Graph

2070 Commits

Author SHA1 Message Date
Eric Fiselier
b169bb00d1 Mark LWG issue 2276 as complete. Add _LIBCPP_ASSERTS for it
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@271247 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-31 01:50:55 +00:00
Eric Fiselier
efa8e8868c Make string_view work with -fno-exceptions and get tests passing.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@271237 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-30 23:53:19 +00:00
Eric Fiselier
53d9966ed2 Cleanup error handling when TLS creation fails
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@271235 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-30 23:15:19 +00:00
Eric Fiselier
d9343ac2e4 Fix PR27751. Add proper dependancies for install-libcxx-headers rule
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@271073 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-27 23:33:10 +00:00
Ben Craig
5163e46afb [libcxx] Allow explicit pthread opt-in
The existing pthread detection code in __config is pretty good for
common operating systems. It doesn't allow cmake-time choices to be
made for uncommon operating systems though.

This change adds the LIBCXX_HAS_PTHREAD_API cmake flag, which turns
into the _LIBCPP_HAS_THREAD_API_PTHREAD preprocessor define. This is
a name change from the old _LIBCPP_THREAD_API_PTHREAD. The lit tests
want __config_site.in variables to have a _LIBCPP_HAS prefix.

http://reviews.llvm.org/D20573


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@270735 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-25 17:40:09 +00:00
Ben Craig
fc1962da37 Reorganize locale extension fallbacks. NFCI
The various _l locale extension functions originate from very
different places.  Some come from POSIX, some are BSD extensions,
and some are shared BSD and GLIBC extensions. This patch tries to
group the local extension reimplementations by source. This should
make it easier to make libcxx work with POSIX compliant C libraries
that lack these extensions.

The fallback locale functions are also useful on their own for other
lightweight platforms. Putting these fallback implementations in
support/xlocale should enable code sharing.

I have no access to a newlib system or an android system to build
and test with. I _do_ have access to a system without any of the _l
locale extensions though, and I was able to ensure that the new
__posix_l_fallback.h and __strtonum_fallback.h didn't have any massive
problems.

http://reviews.llvm.org/D17416


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@270213 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-20 12:58:41 +00:00
Eric Fiselier
14273e8a56 Cleanup superfluous std:: qualifiers in <type_traits>
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@269998 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-18 23:09:24 +00:00
Eric Fiselier
7995c48d7f Optimize declval for compile times. Patch from Eric Niebler.
This patch implements the C++11 version of declval without requiring a template
instantiation.

See PR27798 for more information. https://llvm.org/bugs/show_bug.cgi?id=27798


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@269991 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-18 22:23:46 +00:00
Marshall Clow
2241cf0d5b Change the control flow in atomic_compare_exchange_strong to avoid a potential deadlock.
When you assign a shared_ptr, the deleter gets called and assigned. In this routine, the assignment happens inside a critical section, which could (potentially) lead to a deadlock, if the deleter did something wonky. Now we swap the old value with an (empty) temporary shared_ptr, and then let the temporary delete the old value when it goes out of scope (after the lock has been released).  This should fix PR#27724. Thanks to Hans Boehm for the bug report and the suggested fix.



git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@269965 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-18 17:50:13 +00:00
Marshall Clow
d8fc1ec894 Implement LWG2576: istream_iterator and ostream_iterator should use std::addressof
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@269789 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-17 17:44:40 +00:00
Marshall Clow
2c15439dd3 Implement P0030R1: Introduce a 3-Argument Overload to std::hypot
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@269772 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-17 14:52:19 +00:00
Marshall Clow
eaba7bb5ac Add a couple of _LIBCPP_ASSERT calls. No functional change.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@269663 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-16 16:55:32 +00:00
Eric Fiselier
8c8f0e5b65 Enable Pthread threading API on Solaris. Fix PR27677
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@268860 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-07 17:05:46 +00:00
Eric Fiselier
4db388b579 Change allocator<T>::allocate to throw length_error, not bad_alloc
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@268842 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-07 03:12:24 +00:00
Eric Fiselier
dba23b499b Add experimental container alias templates for PMRs
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@268841 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-07 03:09:55 +00:00
Eric Fiselier
96e4c23bf1 Fix typo it _LIBCPP_NO_EXCEPTIONS macro
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@268838 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-07 02:30:21 +00:00
Eric Fiselier
257fd699fd Add <experimental/memory_resource>
Reviewers: mclow.lists, EricWF

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D20007

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@268829 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-07 01:04:55 +00:00
Asiri Rathnayake
35ff03b7c2 Refactor pthread usage of libcxx.
This patch extracts out all the pthread dependencies of libcxx into the
new header __threading_support. The motivation is to make it easy to
re-target libcxx into platforms that do not support pthread.

Original patch from Fulvio Esposito (fulvio.esposito@outlook.com) - D11781

Applied with tweaks - D19412

Change-Id: I301111f0075de93dd8129416e06babc195aa936b

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@268734 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-06 14:06:29 +00:00
Marshall Clow
360fa62a01 Fixed some spelling errors in assert messages. No functional change. Thanks to giffunip@yahoo.com for the report.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@268510 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-04 15:35:50 +00:00
Chris Bieneman
135ac80a48 [CMake] Fix a copy-paste error
Based on post commit feedback from Eric Fiselier.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@268401 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-03 16:54:20 +00:00
Eric Fiselier
6aec0206da Fix PR27538. Remove __is_convertible specializations for array and function types.
This patch fixes a bunch of bugs in the fallback implementation of
is_convertible, which is used by GCC. Removing the "__is_convertible"
specializations for array/function types we fallback on the SFINAE test,
which is more correct.

See https://llvm.org/bugs/show_bug.cgi?id=27538


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@268359 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-03 04:26:02 +00:00
Eric Fiselier
219406e77f [libcxx] [test] Replace non-Standard "atomic_flag f(false);" with Standard "atomic_flag f;"
Summary:
Replace non-Standard "atomic_flag f(false);" with Standard "atomic_flag f;" in clear tests.
Although the  value of 'f' is unspecified it shouldn't matter because these tests always call `f.test_and_set()` without checking the result, so the initial state shouldn't matter.

The test init03.pass.cpp is explicitly testing this non-Standard extension; It has been moved into the `test/libcxx` directory.

Reviewers: mclow.lists, STL_MSFT

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D19758

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@268355 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-03 02:12:26 +00:00
Chris Bieneman
ffa3db2cc6 [CMake] Create a separate install target for libcxx headers
This change doesn't impact the behavior of the install-libcxx target which installs whichever libcxx components you build, it just adds a separate target to just install the headers.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@268124 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-29 22:17:15 +00:00
Eric Fiselier
59af3f895f Fix PR21428 for long. Buffer was one byte too small in octal formatting case. Rename previously added test
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@268009 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-29 07:23:20 +00:00
Evgeniy Stepanov
9341a8a746 Cleanup: move visibility/linkage attributes to the first declaration.
http://reviews.llvm.org/D15404

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@267093 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-22 01:04:55 +00:00
Eric Fiselier
df46b78ce7 Fix LWG issue #2106: move_iterators returning prvalues
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@267091 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-22 00:49:12 +00:00
Eric Fiselier
8f1e73dfd2 Add is_swappable/is_nothrow_swappable traits
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@267079 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-21 23:38:59 +00:00
Eric Fiselier
a6013cc92f Make ios_base::failure visibility specified consistent
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@267076 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-21 23:00:33 +00:00
Eric Fiselier
566bcb4bad Fix most GCC attribute ignored warnings
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@267074 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-21 22:54:21 +00:00
Weiming Zhao
994fb967d3 [libc++] fix macro redef warning when exception is disabled
Summary:
 when setting LIBCXX_ENABLE_EXCEPTIONS=false, _LIBCPP_NO_EXCEPTIONS wil be defined in both commandline and _config

Reviewers: bcraig, EricWF

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D19344

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@266956 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-21 05:28:18 +00:00
Eric Fiselier
e94c1aee2b [libcxx] Fix PR15638 - Only allocate in parent when starting a thread to prevent calling terminate.
Summary:
Hi,

When creating a new thread libc++ performs at least 2 allocations. The first allocates a tuple of args and the functor that will be passed to the new thread. The second allocation is for the thread local storage needed internally by libc++. Currently the second allocation happens in the child thread, meaning that if it throws the program will terminate with an uncaught bad alloc.

The solution to this is to allocate ALL memory in the parent thread and then pass it to the child.

See https://llvm.org/bugs/show_bug.cgi?id=15638

Reviewers: mclow.lists, danalbert, jroelofs, EricWF

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D13748

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@266851 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-20 02:21:33 +00:00
Eric Fiselier
8d5cbd7ce2 Add 'is_callable' and 'is_nothrow_callable' traits and cleanup INVOKE.
The primary purpose of this patch is to add the 'is_callable' traits.
Since 'is_nothrow_callable' required making 'INVOKE' conditionally noexcept
I also took this oppertunity to implement a constexpr version of INVOKE.
This fixes 'std::experimental::apply' which required constexpr 'INVOKE support'.

This patch will be followed up with some cleanup. Primarly removing most
of "__member_function_traits" since it's no longer used by INVOKE (in C++11 at least).


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@266836 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-20 00:14:32 +00:00
Ben Craig
d59d416bc9 Include initializer_list from utility
The C++11 and C++14 standards both say in the header <utility> synopsis that
<utility> shall include <initializer_list>.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@266808 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-19 20:13:55 +00:00
Eric Fiselier
95526d31cb Make tuples constructors conditionally EXPLICIT. See N4387
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@266703 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-19 01:19:25 +00:00
Eric Fiselier
2e37f92b52 Mark LWG issue 2469 as done. Also simplify try_emplace and insert_or_assign implementations in unordered_map
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@266591 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-18 06:51:33 +00:00
Eric Fiselier
134ff65b8f Implement LWG issue 2219 - support reference_wrapper in INVOKE
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@266590 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-18 06:17:30 +00:00
Eric Fiselier
b952822a48 Add hash specializations for __int128_t. Fixes LWG issue 2119
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@266587 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-18 02:54:00 +00:00
Eric Fiselier
91a156579e Fix LWG issue 2345 - Add insert(value_type&&)
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@266585 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-18 01:40:45 +00:00
Eric Fiselier
dc414cd8ca Teach map/unordered_map how to optimize 'emplace(Key, T)'.
In cases where emplace is called with two arguments and the first one
matches the key_type we can Key to check for duplicates before allocating.

This patch expands on work done by dexonsmith@apple.com.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@266498 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-16 00:23:12 +00:00
Eric Fiselier
83c9dc1714 Extract key to avoid preemptive mallocs in insert/emplace in associative containers
Summary: This patch applies Duncan's work on __hash_table to __tree.

Reviewers: mclow.lists, dexonsmith

Subscribers: dexonsmith, cfe-commits

Differential Revision: http://reviews.llvm.org/D18637

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@266491 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-15 23:27:27 +00:00
Eric Fiselier
d5019333fa Cleanup and guard tuple's constructor SFINAE. Fixes PR22806 and PR23256.
There are two main fixes in this patch.

First the constructor SFINAE was changed so that it's evaluated in two stages
where the first stage evaluates the "safe" SFINAE conditions and the second
evaluates the "dangerous" ones. The key is that the second stage is lazily
evaluated only if the first stage passes. This helps fix PR23256
(https://llvm.org/bugs/show_bug.cgi?id=23256).

The second fix is for PR22806 and LWG issue 2549. This fix applies
the suggested resolution to the LWG issue in order to prevent the construction
of dangling references. The SFINAE for this check is contained within
the _PreferTupleLikeConstructor alias template. The tuple-like constructors
are disabled whenever that trait returns false.

(https://llvm.org/bugs/show_bug.cgi?id=22806)
(http://cplusplus.github.io/LWG/lwg-active.html#2549)

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@266461 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-15 18:05:59 +00:00
Eric Fiselier
55ad3ac786 [libcxx] Remove the "reduced-arity-initialization" extension from the uses-allocator constructors
Summary:
A default uses-allocator constructor has been added since that overload was previously provided by the extended constructor.

Since Clang does implicit conversion checking after substitution this constructor has to deduce the allocator_arg_t parameter so that it can prevent the evaluation of "is_default_constructible" if the first argument doesn't match. See http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1391 for more information.

This patch fixes PR24779 (https://llvm.org/bugs/show_bug.cgi?id=24779)

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D19006

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@266409 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-15 03:29:40 +00:00
Marshall Clow
8165249d39 Qualify calls to addressof to avoid getting ADL. Fixes PR#27254.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@266209 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-13 17:02:23 +00:00
Marshall Clow
dca800cd0f Implement LWG#680, which was missed lo these many moons ago, and was reported as bug #27259. As a drive-by fix, replace the hand-rolled equivalent to addressof in __wrap_iter with the real thing.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@265914 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-11 03:54:53 +00:00
Marshall Clow
f4f7d8fc96 Recommit r263036 with additional inlining, so that it will continue to work with existing system dylibs. Implements LWG#2583
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@265706 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-07 18:13:41 +00:00
Marshall Clow
005c60b666 Fix bug #27260 - add missing swap(reference, reference) to vector<bool>.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@265672 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-07 14:20:31 +00:00
Marshall Clow
32c9099aac Remove unused internal routines. No functional change
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@265363 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-04 23:23:35 +00:00
Marshall Clow
5f9110c961 Put back the undefs that Richard removed. Boost won't build w/o these; specifically the file 'bytes_methods.h' in Apple's python framework defines these.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@265358 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-04 22:49:20 +00:00
Marshall Clow
a27781113c Fix for Bug #27193; 'std::acos on complex does not agree with C'. Tests need work; so the bug will stay open.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@265306 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-04 16:08:54 +00:00
Eric Fiselier
d2864678e0 Fix LWG issue 2469 - Use piecewise construction in map::operator[].
map's allocator may only be used to construct objects of 'value_type',
or in this case 'pair<const Key, Value>'. In order to respect this requirement
in operator[], which requires default constructing the 'mapped_type', we have
to use pair's piecewise constructor with '(tuple<Kep>, tuple<>)'.

Unfortunately we still need to provide a fallback implementation for C++03
since we don't have <tuple>. Even worse this fallback is the last remaining
user of '__hash_map_node_destructor' and '__construct_node_with_key'.

This patch also switches try_emplace over to __tree.__emplace_unique_key_args.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@264989 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-31 03:13:37 +00:00