Commit Graph

2513 Commits

Author SHA1 Message Date
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
Eric Fiselier
db21506d13 Teach __tree how to handle map's __value_type
This patch is fairly large and contains a number of changes. The changes all work towards
allowing __tree to properly handle __value_type esspecially when inserting into the __tree.
I chose not to break this change into smaller patches because it wouldn't be possible to
write meaningful standard-compliant tests for each patch.

It is very similar to r260513 "[libcxx] Teach __hash_table how to handle unordered_map's __hash_value_type".

Changes in <map>
 * Remove __value_type's constructors because it should never be constructed directly.

 * Make map::emplace and multimap::emplace forward to __tree and remove the old definitions

 * Remove "__construct_node" map and multimap member functions. Almost all of the construction is done within __tree.

 * Fix map's move constructor to access "__value_type.__nc" directly and pass this object to __tree::insert.

Changes in <__tree>
 * Add traits to detect, handle, and unwrap, map's "__value_type".

 * Convert methods taking "value_type" to take "__container_value_type" instead. Previously these methods caused
  unwanted implicit conversions from "std::pair<Key, Value>" to "__value_type<Key, Value>".

 * Delete __tree_node and __tree_node_base's constructors and assignment operators. The node types should never be constructed
   because the "__value_" member of __tree_node must be constructed directly by the allocator.

 * Make the __tree_node_destructor class and "__construct_node" methods unwrap "__node_value_type" into "__container_value_type" before invoking the allocator. The user's allocator can only be used to construct and destroy the container's value_type. Passing it map's "__value_type" was incorrect.

 * Cleanup the "__insert" and "__emplace" methods. Have __insert forward to an __emplace function wherever possible to reduce
   code duplication. __insert_unique(value_type const&) and __insert_unique(value_type&&) forward to __emplace_unique_key_args.
   These functions will not allocate a new node if the value is already in the tree.

 * Change the __find* functions to take the "key_type" directly instead of passing in "value_type" and unwrapping the key later.
   This change allows the find functions to be used without having to construct a "value_type" first. This allows for a number
   of optimizations.

 * Teach __move_assign and __assign_multi methods to unwrap map's __value_type.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@264986 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-31 02:15:15 +00:00
Eric Fiselier
21f3b4ca42 Update container_test_types.h and cleanup the related tests
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@264985 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-31 02:13:14 +00:00
Paul Robinson
e7931f9d92 Update copyright year to 2016.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@264950 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-30 22:39:53 +00:00
JF Bastien
08511cda39 Implement is_always_lock_free
Summary:

This was voted into C++17 at the Jacksonville meeting. The final P0152R1
paper will be in the upcoming post-Jacksonville mailing, and is also
available here:

  http://jfbastien.github.io/papers/P0152R1.html

Reviewers: mclow.lists, rsmith

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@264413 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-25 15:48:21 +00:00
Richard Barton
037efda0ac Guard a number of tests relying on threads support when built in
single-threaded mode.

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



git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@264191 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-23 21:04:11 +00:00
JF Bastien
4c51222b28 Missing ATOMIC_*_LOCK_FREE tests
Forked from D17951, these tests should have been there but weren't.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263798 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-18 17:48:58 +00:00
Duncan P. N. Exon Smith
798ec8436d unord: Extract key to avoid preemptive mallocs in insert/emplace
unordered_set::emplace and unordered_map::emplace construct a node, then
try to insert it.  If insertion fails, the node gets deleted.

To avoid this unnecessary malloc traffic, check to see if the argument
to emplace has the appropriate key_type.  If so, we can use that key
directly and delay the malloc until we're sure we're inserting something
new.

Test updates by Eric Fiselier, who rewrote the old allocation tests to
include the new cases.

There are two orthogonal future directions:

1. Apply the same optimization to set and map.

2. Extend the optimization to when the argument is not key_type, but can
   be converted to it without side effects.  Ideally, we could do this
   whenever key_type is trivially destructible and the argument is
   trivially convertible to key_type, but in practise the relevant type
   traits "blow up sometimes".  At least, we should catch a few simple
   cases (such as when both are primitive types).

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263746 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-17 20:45:20 +00:00
Eric Fiselier
735026e3ee Make std::addressof constexpr in C++17 (Clang only).
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263688 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-17 03:30:56 +00:00
Eric Fiselier
8b15aee1a1 Add __unconstref for future use
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263659 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-16 20:32:07 +00:00
Eric Fiselier
a15e8c3a18 Add clang thread safety annotations to mutex and lock_guard. Patch by jamesr@google.com.
This adds clang thread safety annotations to std::mutex and
std::lock_guard so code using these types can use these types directly
instead of having to wrap the types to provide annotations. These checks
when enabled by -Wthread-safety provide simple but useful static
checking to detect potential race conditions.
See http://clang.llvm.org/docs/ThreadSafetyAnalysis.html for details.

This patch was reviewed in http://reviews.llvm.org/D14731.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263611 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-16 02:30:06 +00:00
Jonas Hahnfeld
3614681995 [libcxx] Remove localization tests for Russian month names
Commit f49839299a085505eb673544744b61d2d9cdd1db in glibc-2.14 changed the
locales to the currently required format. However, they were again changed in
commit 55bdd2866f23b28422d969060b3518909a12b100 which has been released in 2.17.

That leads to the current situation where Debian and e.g. CentOS 6 have the
pre-2.14 locales, for example Ubuntu 14.04 has pre-2.17 and CentOS 7 on the
other hand has the newest locales in glibc-2.17.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263554 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-15 15:55:58 +00:00
Marshall Clow
d124b5b45d Missed this file in previous checkin
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263507 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-14 23:07:58 +00:00
Marshall Clow
e22d9e58d3 Implement LWG2577: {shared,unique}_lock</tt> should use std::addressof
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263506 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-14 23:07:32 +00:00
Marshall Clow
fd2d680753 Add failing tests that I forgot to add to the last commit
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263451 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-14 17:58:54 +00:00
Marshall Clow
ed77ffbc4d Implement LWG#2566: Requirements on the first template parameter of container adaptors
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263450 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-14 17:58:11 +00:00
Marshall Clow
d8b9e0bbff Mark exception-throwing test as XFAIL when exceptions are disabled
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263405 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-14 02:51:50 +00:00
Evgeniy Stepanov
2fe62cded3 Disable CFI checks in std::addressof.
std::addressof may be used on a storage of an object before the start
of its lifetime (see std::allocate_shared for example). CFI flags the
C-style cast as invalid in that case.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263310 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-11 23:50:57 +00:00
Nico Weber
fadd1db573 Revert r263036, it's ABI-breaking.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263246 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-11 15:26:06 +00:00
Marshall Clow
a3f5b39348 Update status to mark 2579 complete
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263043 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-09 18:09:07 +00:00
Marshall Clow
f40ec90389 Implement LWG#2579: Inconsistency wrt Allocators in basic_string assignment vs. basic_string::assign
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263042 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-09 18:08:29 +00:00
Marshall Clow
ff0b9f5749 Implement LWG#2583: There is no way to supply an allocator for basic_string(str, pos)
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263036 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-09 17:51:43 +00:00
Marshall Clow
d7d1bda0f4 Add some more tests for the containers type requirements
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263029 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-09 17:19:07 +00:00
Ben Craig
2187425203 Split locale management out of locale_win32. NFCI
For the locale refactor, the locale management functions (newlocale,
freelocale, uselocale) are needed in a separate header from the various _l
functions. This is because some platforms implement the _l functions in terms
of a locale switcher RAII helper, and the locale switcher RAII helper needs
the locale management functions. This patch helps pave the way by getting all
the functions in the right files, so that later diffs aren't completely
horrible.

Unfortunately, the Windows, Cygwin, and MinGW builds seemed to have
bit-rotted, so I wasn't able to test this completely. I don't think I made
things any worse than they already are though.

http://reviews.llvm.org/D17419


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263020 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-09 15:49:59 +00:00
Ben Craig
fd556585b2 Reorganize _LIBCPP_LOCALE__L_EXTENSIONS
Instead of checking _LIBCPP_LOCALE_L_EXTENSIONS all over, instead check it
once, and define the various *_l symbols once. The private redirector symbol
names are all prefixed with _libcpp_* so that they won't conflict with user
symbols, and so they won't conflict with future C library symbols. In
particular, glibc likes providing private symbols such as __locale_t, so we
should follow a different naming pattern (like _libcpp_*) to avoid problems
on that front.

Tested on Linux with glibc. Hoping for the best on OSX and the various BSDs.

http://reviews.llvm.org/D17456


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263016 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-09 15:39:39 +00:00
Marshall Clow
ee208ca378 Remove a couple tabs that crept in
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@262932 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-08 15:45:06 +00:00
Marshall Clow
f532a70b63 Implement P0272R1: Give 'std::string' a non-const '.data()' member function
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@262931 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-08 15:44:30 +00:00
Marshall Clow
f6d6b51b63 Implement P0253R1: Fixing a design mistake in the searchers interface.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@262928 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-08 15:12:52 +00:00
Marshall Clow
3e0808efb8 Implement P0025R0: 'An algorithm to clamp a value between a pair of boundary values' for C++17
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@262871 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-07 22:43:49 +00:00
Marshall Clow
8d48d9b2cc non-member swap for array was mistakenly taking const ref params. Fixed and added test. Thanks to Ben Craig for the catch
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@262866 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-07 21:57:10 +00:00
Marshall Clow
60d223df07 Update with work items passed in Jacksonville
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@262807 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-06 17:45:24 +00:00
JF Bastien
c7c4c77c26 libc++: fix typo
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@262771 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-05 14:22:02 +00:00
Marshall Clow
4951a48a6a Fix for PR26812: possible overflow issue in std::allocator::allocate
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@262610 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-03 12:04:39 +00:00
Marshall Clow
72cb14cff6 more status updates
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261926 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-25 20:17:03 +00:00
Marshall Clow
7490f53118 Added tests to make sure that the categorization traits work on incomplete types
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261925 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-25 20:15:47 +00:00
Marshall Clow
716030e588 Update the status of a N4089 and a couple issues
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261896 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-25 16:55:58 +00:00
Marshall Clow
61d4dd0390 Another chunk of N4089
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261894 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-25 16:50:51 +00:00
Marshall Clow
17a80bc8b6 No, really - test the constructor
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261875 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-25 15:27:13 +00:00
Marshall Clow
5425ba06f6 Add test to ensure that the converting constructor in N4089 is present and working
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261874 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-25 15:25:29 +00:00
Marshall Clow
0f0903b78d Fix a missing closing tag
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261677 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-23 19:48:44 +00:00
Marshall Clow
435ccb367d More updates
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261676 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-23 19:48:09 +00:00
Marshall Clow
a4abce578a These new tests fail on the green-dragon bots, which use an old Apple compiler.
Since they're scheduled to be updated soon, we'll just comment out this test for
the moment, and re-commit when the bots are updated.



git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261661 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-23 18:09:38 +00:00
Marshall Clow
54b5f6f132 More updates
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261655 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-23 17:07:15 +00:00
Marshall Clow
c310174934 Add tests for LWG#2560. No code changes, just tests
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261653 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-23 17:01:52 +00:00
Marshall Clow
20fefa6b3a Add additional tests to ensure that we DTRT with short lists. This is LWG#2590, but there are no code changes, just additional tests
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261648 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-23 16:25:20 +00:00
Marshall Clow
d052c68671 More updates; patch for 2583 ready
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261647 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-23 16:20:24 +00:00
Marshall Clow
d812865ec0 Fix __is_referenceable to work with vector types. Fixes PR#26654 and 26656. Thanks to Evgeniy for the reports, and to Eric for the suggestion on how to fix it.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261581 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-22 22:13:03 +00:00
Eric Fiselier
66e344fa9b Rename <__hash_table> traits so they don't conflict with similar traits.
In particular <__tree> defines many of the same types of traits classes.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261421 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-20 07:59:16 +00:00