Commit Graph

2498 Commits

Author SHA1 Message Date
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
Eric Fiselier
227b47c292 Remove all usages of "const" node pointer typedefs in the assoc containers.
The "const" pointer typedefs such as "__node_const_pointer" and
"__node_base_const_pointer" are identical to their non-const pointer types.
This patch changes all usages of "const" pointer type names to their respective
non-const typedef.

Since "fancy pointers to const" cannot be converted back to a non-const pointer
type according to the allocator requirements it is important that we never
actually use "const" pointers.

Furthermore since "__node_const_pointer" and "__node_pointer" already
name the same type, it's very confusing to use both names. Especially
when defining const/non-const overloads for member functions.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261419 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-20 07:12:17 +00:00
Eric Fiselier
55263484af Cleanup node-type handling in the associative containers.
This patch is very similar to r260431.

This patch is the first in a series of patches that's meant to better
support map. map has a special "value_type" that
differs from pair<const Key, Value>. In order to meet the EmplaceConstructible
and CopyInsertable requirements we need to teach __tree about this
special value_type.

This patch creates a "__tree_node_types" traits class that contains
all of the typedefs needed by the associative containers and their iterators.
These typedefs include ones for each node type and  node pointer type,
as well as special typedefs for "map"'s value type.

Although the associative containers already supported incomplete types, this
patch makes it official by adding tests.

This patch will be followed up shortly with various cleanups within __tree and
fixes for various map bugs and problems.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261416 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-20 05:28:30 +00:00
Eric Fiselier
d47d3590ca Work around GCC bug in .fail.cpp tests
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261391 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-20 01:11:55 +00:00
Eric Fiselier
100ce64c6d Fix PR26622 - Make CheckLibcxxAtomic.cmake use the libc++ headers.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261383 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-20 00:24:43 +00:00
Eric Fiselier
b3792285ed Make __wrap_iter work with GCC again
Summary:
This bug was originally fixed in http://reviews.llvm.org/D7201. 

However it was broken again by the fix to https://llvm.org/bugs/show_bug.cgi?id=22605.

This patch re-fixes __wrap_iter with GCC by providing a forward declaration of <vector> before the friend declaration in __wrap_iter.
This patch avoids the issues in PR22605 by putting canonical forward declarations in <iosfwd> and including <iosfwd> in <vector>.

<iosfwd> was chosen as the canonical forward declaration headers for the following reasons:

1. `<iosfwd>` is small with almost no dependancies.
2. It already forward declares `std::allocator`
3. It is already included in `<iterator>` which we need to fix the GCC bug.

This patch fixes the test "gcc_workaround.pass.cpp"

Reviewers: mclow.lists, EricWF

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261382 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-20 00:19:45 +00:00
Eric Fiselier
6918a0973b Add stdbool.h wrapper for libc++
Summary:
According to the C++ standard <stdbool.h> isn't allowed to define `true` `false` or `bool`. However these macros are sometimes defined by the compilers `stdbool.h`.

Clang defines the macros whenever `__STRICT_ANSI__` isn't defined (ie `-std=gnu++11`).
New GCC versions define the macros in C++03 mode only, older GCC versions (4.9 and before) always define the macros.

This patch adds a wrapper header for `stdbool.h` that undefs the required macros.

Reviewers: mclow.lists, rsmith, EricWF

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261381 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-20 00:16:41 +00:00
Ben Craig
48fcc78492 Split locale management out of newlib/xlocale.h. NFCI
This is one part of many of a locale refactor. See
http://reviews.llvm.org/D17146 for an idea of where this is going.

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.

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

Unfortunately, I have no access to a newlib system to build and test with, so
this change has been made blind.

Reviewed: http://reviews.llvm.org/D17382


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261231 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-18 17:40:16 +00:00
Ben Craig
9aebc5f23d Split locale management out of ibm/xlocale.h. NFCI
This is one part of many of a locale refactor. See
http://reviews.llvm.org/D17146 for an idea of where this is going.

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, I have no access to an AIX machine to build with, so this change
has been made blind. Also, the original author (Xing Xue) does not appear to
have a Phabricator account.

Reviewed: http://reviews.llvm.org/D17380


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261230 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-18 17:37:33 +00:00
Eric Fiselier
7f978a8885 Commit tests missing from r261180.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261181 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-18 00:21:09 +00:00
Eric Fiselier
0493d020fc Get <ext/hash_map> working again
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261180 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-18 00:20:34 +00:00
Daniel Sanders
7e87bc9c67 [libcxx] Fix definition of regex_traits::__regex_word on big-endian glibc systems
Summary:
On glibc, the bits used for the various character classes is endian dependant
(see _ISbit() in ctypes.h) but __regex_word does not account for this and uses
a spare bit that isn't spare on big-endian. On big-endian, it overlaps with the
bit for graphic characters which causes '-', '@', etc. to be considered a word
character.

Fixed this by defining the value using _ISbit(15) on MIPS glibc systems. We've
restricted this to MIPS for now to avoid the risk of introducing failures in
other targets.

Fixes PR26476.

Reviewers: hans, mclow.lists

Subscribers: dsanders, cfe-commits

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


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@261088 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-17 13:16:31 +00:00
Marshall Clow
62d5d15103 Add some status
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@260975 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-16 16:05:15 +00:00
Marshall Clow
15312aa265 Add some comments
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@260966 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-16 14:42:23 +00:00
Marshall Clow
0e4ed2fbbb Added a (private) status page for the Jacksonville meeting
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@260964 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-16 14:35:56 +00:00
Vasileios Kalintiris
fea3b21ea9 Issue a warning instead of fatal errors when checks for libatomic fail.
This should fix PR26631, PR26622 and has the nice property that the addition
of the CheckLibcxxAtomic.cmake module acts as an NFC on the platforms of the
reporters (at least for the time being).

As these bug reports explain, CMake fails the atomic check because the
include headers might not exist in the host environment. We could
potentially point to the headers provided by libcxx itself.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@260961 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-16 14:15:27 +00:00