Commit Graph

2861 Commits

Author SHA1 Message Date
Eric Fiselier 90fb2baff7 [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

llvm-svn: 266409
2016-04-15 03:29:40 +00:00
Marshall Clow 3126c88137 Qualify calls to addressof to avoid getting ADL. Fixes PR#27254.
llvm-svn: 266209
2016-04-13 17:02:23 +00:00
Marshall Clow 05333fc8af 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.
llvm-svn: 265914
2016-04-11 03:54:53 +00:00
Eric Fiselier a9a9a8a92a Update filesystem status
llvm-svn: 265856
2016-04-08 21:52:32 +00:00
Marshall Clow 89685ed0da Recommit r263036 with additional inlining, so that it will continue to work with existing system dylibs. Implements LWG#2583
llvm-svn: 265706
2016-04-07 18:13:41 +00:00
Marshall Clow f90ec0e82e Added a noexcept test
llvm-svn: 265674
2016-04-07 14:24:16 +00:00
Marshall Clow 0ab4205705 Fix bug #27260 - add missing swap(reference, reference) to vector<bool>.
llvm-svn: 265672
2016-04-07 14:20:31 +00:00
Marshall Clow b10079e936 Remove unused internal routines. No functional change
llvm-svn: 265363
2016-04-04 23:23:35 +00:00
Marshall Clow bb8c665320 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.
llvm-svn: 265358
2016-04-04 22:49:20 +00:00
Marshall Clow 35508d4921 Fix for Bug #27193; 'std::acos on complex does not agree with C'. Tests need work; so the bug will stay open.
llvm-svn: 265306
2016-04-04 16:08:54 +00:00
Eric Fiselier 54f0cda625 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.

llvm-svn: 264989
2016-03-31 03:13:37 +00:00
Eric Fiselier 5e3ea4dd79 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.

llvm-svn: 264986
2016-03-31 02:15:15 +00:00
Eric Fiselier 8a0313d4b6 Update container_test_types.h and cleanup the related tests
llvm-svn: 264985
2016-03-31 02:13:14 +00:00
Paul Robinson 9039bf0bc8 Update copyright year to 2016.
llvm-svn: 264950
2016-03-30 22:39:53 +00:00
JF Bastien b95ee819f2 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

llvm-svn: 264413
2016-03-25 15:48:21 +00:00
Richard Barton 3c0bc9697a Guard a number of tests relying on threads support when built in
single-threaded mode.

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

llvm-svn: 264191
2016-03-23 21:04:11 +00:00
JF Bastien 5b5061f0ca Missing ATOMIC_*_LOCK_FREE tests
Forked from D17951, these tests should have been there but weren't.

llvm-svn: 263798
2016-03-18 17:48:58 +00:00
Duncan P. N. Exon Smith fde79b40c2 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).

llvm-svn: 263746
2016-03-17 20:45:20 +00:00
Eric Fiselier a58d430cac Make std::addressof constexpr in C++17 (Clang only).
llvm-svn: 263688
2016-03-17 03:30:56 +00:00
Eric Fiselier c32ee0476b Add __unconstref for future use
llvm-svn: 263659
2016-03-16 20:32:07 +00:00
Eric Fiselier 7865b2e943 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.

llvm-svn: 263611
2016-03-16 02:30:06 +00:00
Jonas Hahnfeld 83bedca7e9 [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

llvm-svn: 263554
2016-03-15 15:55:58 +00:00
Marshall Clow 6257b93e69 Missed this file in previous checkin
llvm-svn: 263507
2016-03-14 23:07:58 +00:00
Marshall Clow 0b54e792b7 Implement LWG2577: {shared,unique}_lock</tt> should use std::addressof
llvm-svn: 263506
2016-03-14 23:07:32 +00:00
Marshall Clow bb9f50014c Add failing tests that I forgot to add to the last commit
llvm-svn: 263451
2016-03-14 17:58:54 +00:00
Marshall Clow c1fe2c4329 Implement LWG#2566: Requirements on the first template parameter of container adaptors
llvm-svn: 263450
2016-03-14 17:58:11 +00:00
Marshall Clow 4251d3779f Mark exception-throwing test as XFAIL when exceptions are disabled
llvm-svn: 263405
2016-03-14 02:51:50 +00:00
Evgeniy Stepanov 1bc0e399ee 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.

llvm-svn: 263310
2016-03-11 23:50:57 +00:00
Nico Weber 47c3a4743e Revert r263036, it's ABI-breaking.
llvm-svn: 263246
2016-03-11 15:26:06 +00:00
Marshall Clow ef13c522b4 Update status to mark 2579 complete
llvm-svn: 263043
2016-03-09 18:09:07 +00:00
Marshall Clow ffc888bc09 Implement LWG#2579: Inconsistency wrt Allocators in basic_string assignment vs. basic_string::assign
llvm-svn: 263042
2016-03-09 18:08:29 +00:00
Marshall Clow e96f8b52d9 Implement LWG#2583: There is no way to supply an allocator for basic_string(str, pos)
llvm-svn: 263036
2016-03-09 17:51:43 +00:00
Marshall Clow 1b868e19c3 Add some more tests for the containers type requirements
llvm-svn: 263029
2016-03-09 17:19:07 +00:00
Ben Craig 069b432bf7 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

llvm-svn: 263020
2016-03-09 15:49:59 +00:00
Ben Craig d2f15ba3a1 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

llvm-svn: 263016
2016-03-09 15:39:39 +00:00
Marshall Clow 49738fe10b Remove a couple tabs that crept in
llvm-svn: 262932
2016-03-08 15:45:06 +00:00
Marshall Clow dd1729fe8a Implement P0272R1: Give 'std::string' a non-const '.data()' member function
llvm-svn: 262931
2016-03-08 15:44:30 +00:00
Marshall Clow 28cc4dde49 Implement P0253R1: Fixing a design mistake in the searchers interface.
llvm-svn: 262928
2016-03-08 15:12:52 +00:00
Marshall Clow 146c14ac33 Implement P0025R0: 'An algorithm to clamp a value between a pair of boundary values' for C++17
llvm-svn: 262871
2016-03-07 22:43:49 +00:00
Marshall Clow ee66eb1328 non-member swap for array was mistakenly taking const ref params. Fixed and added test. Thanks to Ben Craig for the catch
llvm-svn: 262866
2016-03-07 21:57:10 +00:00
Marshall Clow 4b5d4fde68 Update with work items passed in Jacksonville
llvm-svn: 262807
2016-03-06 17:45:24 +00:00
JF Bastien fc45f323bb libc++: fix typo
llvm-svn: 262771
2016-03-05 14:22:02 +00:00
Marshall Clow 4cec709ed6 Fix for PR26812: possible overflow issue in std::allocator::allocate
llvm-svn: 262610
2016-03-03 12:04:39 +00:00
Marshall Clow 41f4b6d4fa more status updates
llvm-svn: 261926
2016-02-25 20:17:03 +00:00
Marshall Clow 4877c197c2 Added tests to make sure that the categorization traits work on incomplete types
llvm-svn: 261925
2016-02-25 20:15:47 +00:00
Marshall Clow 21dc2c25e7 Update the status of a N4089 and a couple issues
llvm-svn: 261896
2016-02-25 16:55:58 +00:00
Marshall Clow 026b805687 Another chunk of N4089
llvm-svn: 261894
2016-02-25 16:50:51 +00:00
Marshall Clow 71abfc1392 No, really - test the constructor
llvm-svn: 261875
2016-02-25 15:27:13 +00:00
Marshall Clow 6433044dc9 Add test to ensure that the converting constructor in N4089 is present and working
llvm-svn: 261874
2016-02-25 15:25:29 +00:00
Marshall Clow 16b8eddcac Fix a missing closing tag
llvm-svn: 261677
2016-02-23 19:48:44 +00:00
Marshall Clow a6f77c170d More updates
llvm-svn: 261676
2016-02-23 19:48:09 +00:00
Marshall Clow 1b9fae5a40 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.

llvm-svn: 261661
2016-02-23 18:09:38 +00:00
Marshall Clow 1e1f830e93 More updates
llvm-svn: 261655
2016-02-23 17:07:15 +00:00
Marshall Clow 9bb3582fc9 Add tests for LWG#2560. No code changes, just tests
llvm-svn: 261653
2016-02-23 17:01:52 +00:00
Marshall Clow 9fe1e550c8 Add additional tests to ensure that we DTRT with short lists. This is LWG#2590, but there are no code changes, just additional tests
llvm-svn: 261648
2016-02-23 16:25:20 +00:00
Marshall Clow d59478c9ab More updates; patch for 2583 ready
llvm-svn: 261647
2016-02-23 16:20:24 +00:00
Marshall Clow 9b4880e7ec 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.
llvm-svn: 261581
2016-02-22 22:13:03 +00:00
Eric Fiselier 43b121df05 Rename <__hash_table> traits so they don't conflict with similar traits.
In particular <__tree> defines many of the same types of traits classes.

llvm-svn: 261421
2016-02-20 07:59:16 +00:00
Eric Fiselier 0594ad713b 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.

llvm-svn: 261419
2016-02-20 07:12:17 +00:00
Eric Fiselier 089a7cc5de 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.

llvm-svn: 261416
2016-02-20 05:28:30 +00:00
Eric Fiselier 3d8a30a9db Work around GCC bug in .fail.cpp tests
llvm-svn: 261391
2016-02-20 01:11:55 +00:00
Eric Fiselier 3dfec7580b Fix PR26622 - Make CheckLibcxxAtomic.cmake use the libc++ headers.
llvm-svn: 261383
2016-02-20 00:24:43 +00:00
Eric Fiselier 39c193b1f0 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

llvm-svn: 261382
2016-02-20 00:19:45 +00:00
Eric Fiselier a6b7ebe2cd 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

llvm-svn: 261381
2016-02-20 00:16:41 +00:00
Ben Craig b8aea04ef5 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
llvm-svn: 261231
2016-02-18 17:40:16 +00:00
Ben Craig 217946da98 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
llvm-svn: 261230
2016-02-18 17:37:33 +00:00
Eric Fiselier c4ac8bd051 Commit tests missing from r261180.
llvm-svn: 261181
2016-02-18 00:21:09 +00:00
Eric Fiselier 757373e676 Get <ext/hash_map> working again
llvm-svn: 261180
2016-02-18 00:20:34 +00:00
Daniel Sanders 4788179a2c [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

llvm-svn: 261088
2016-02-17 13:16:31 +00:00
Marshall Clow c8e5fc3c08 Add some status
llvm-svn: 260975
2016-02-16 16:05:15 +00:00
Marshall Clow 42770525eb Add some comments
llvm-svn: 260966
2016-02-16 14:42:23 +00:00
Marshall Clow 38748aa300 Added a (private) status page for the Jacksonville meeting
llvm-svn: 260964
2016-02-16 14:35:56 +00:00
Vasileios Kalintiris 867a4e7b8b 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.

llvm-svn: 260961
2016-02-16 14:15:27 +00:00
Richard Smith b1220c04cc Instead of asking glibc to provide correct C++ signatures for <string.h>
functions, ask it whether it did provide them after the fact. Some versions of
glibc fail to compile if you make this request and don't also claim to be at
least GCC 4.3.

llvm-svn: 260622
2016-02-11 23:51:02 +00:00
Eric Fiselier 0f90567744 Fix LWG issue 2469 - Use piecewise construction in unordered_map::operator[].
unordered_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'.

llvm-svn: 260601
2016-02-11 21:45:53 +00:00
Richard Smith 1b1c7e977f Work around regression in glibc 2.22: request that glibc provides the correct
prototypes for <string.h> functions that are converted into overload sets in
C++. This matches the existing workaround in <wchar.h>.

llvm-svn: 260570
2016-02-11 19:40:06 +00:00
Eric Fiselier 614ed76c37 Revert r260514 because it has a bogus commit message.
llvm-svn: 260556
2016-02-11 18:21:18 +00:00
Eric Fiselier 227740d22b Rename CheckLibcxxAtomic.cmake variable result names so they don't clash with LLVM
llvm-svn: 260531
2016-02-11 15:52:52 +00:00
Marshall Clow 9b66ab75fd Add some tests to ensure that the __regex_word does not conflict with any of ctype_base's values.
Hopefully this will catch cases like https://llvm.org/bugs/show_bug.cgi?id=26476 in the future.

llvm-svn: 260527
2016-02-11 15:23:04 +00:00
Eric Fiselier 8e39768c21 Properly down-cast a sentinal node pointer through void*
llvm-svn: 260526
2016-02-11 15:22:37 +00:00
Eric Fiselier 7603e0050e Fix r260515 - Correct typos in CMake changes
llvm-svn: 260524
2016-02-11 15:05:56 +00:00
Eric Fiselier daed67fffe separate nested >>
llvm-svn: 260516
2016-02-11 12:51:19 +00:00
Vasileios Kalintiris d247ac44cc Re-commit "Introduce a cmake module to figure out whether we need to link with libatomic."
This re-applies commit r260235. However, this time we add -gcc-toolchain
to the compiler's flags when the user has specified the LIBCXX_GCC_TOOLCHAIN
variable.

llvm-svn: 260515
2016-02-11 12:43:04 +00:00
Eric Fiselier 45c4d45ead Teach __hash_table how to handle unordered_map's __hash_value_type.
This patch is fairly large and contains a number of changes. The main change
is teaching '__hash_table' how to handle '__hash_value_type'. Unfortunately
this change is a rampant layering violation, but it's required to make
unordered_map conforming without re-writing all of __hash_table.
After this change 'unordered_map' can delegate to '__hash_table' in almost all cases.

The major changes found in this patch are:

  * Teach __hash_table to differentiate between the true container value type
    and the node value type by introducing the "__container_value_type" and
    "__node_value_type" typedefs. In the case of unordered_map '__container_value_type'
    is 'pair<const Key, Value>' and '__node_value_type' is '__hash_value_type'.
    
  * Switch almost all overloads in '__hash_table' previously taking 'value_type'
    (AKA '__node_value_type) to take  '__container_value_type' instead. Previously
    'pair<K, V>' would be implicitly converted to '__hash_value_type<K, V>' because
    of the function signature.
    
  * Add '__get_key', '__get_value', '__get_ptr', and '__move' static functions to
    '__key_value_types'. These functions allow '__hash_table' to unwrap
    '__node_value_type' objects into '__container_value_type' and its sub-parts.

  * Pass  '__hash_value_type::__value_'  to 'a.construct(p, ...)' instead of
    '__hash_value_type' itself. The C++14 standard requires that 'a.construct()'
    and 'a.destroy()' are only ever instantiated for the containers value type.

  * Remove '__hash_value_type's constructors and destructors. We should never
    construct an instance of this type.
    (TODO this is UB but we already do it in plenty of places).
  
  * Add a generic "try-emplace" function to '__hash_table' called
    '__emplace_unique_key_args(Key const&, Args...)'.

  
The following changes were done as cleanup:

  * Introduce the '_LIBCPP_CXX03_LANG' macro to be used in place of
    '_LIBCPP_HAS_NO_VARIADICS' or '_LIBCPP_HAS_NO_RVALUE_REFERENCE'.
    
  * Cleanup C++11 only overloads that assume an incomplete C++11 implementation.
    For example this patch removes the __construct_node overloads that do
    manual pack expansion.
    
  * Forward 'unordered_map::emplace' to '__hash_table' and remove dead code
    resulting from the change. This includes almost all
    'unordered_map::__construct_node' overloads.


The following changes are planed for future revisions:

  * Fix LWG issue #2469 by delegating 'unordered_map::operator[]' to use
    '__emplace_unique_key_args'.
    
  * Rewrite 'unordered_map::try_emplace' in terms of '__emplace_unique_key_args'.
  
  * Optimize '__emplace_unique' to call '__emplace_unique_key_args' when possible.
    This prevent unneeded allocations when inserting duplicate entries.


The additional follow up work needed after this patch:

  * Respect the lifetime rules for '__hash_value_type' by actually constructing it.
  * Make '__insert_multi' act similar to '__insert_unique' for objects of type
    'T&' and 'T const &&' with 'T = __container_value_type'.
  
  

llvm-svn: 260514
2016-02-11 12:25:27 +00:00
Eric Fiselier fcd0221118 Teach __hash_table how to handle unordered_map's __hash_value_type.
This patch is fairly large and contains a number of changes. The main change
is teaching '__hash_table' how to handle '__hash_value_type'. Unfortunately
this change is a rampant layering violation, but it's required to make
unordered_map conforming without re-writing all of __hash_table.
After this change 'unordered_map' can delegate to '__hash_table' in almost all cases.

The major changes found in this patch are:

  * Teach __hash_table to differentiate between the true container value type
    and the node value type by introducing the "__container_value_type" and
    "__node_value_type" typedefs. In the case of unordered_map '__container_value_type'
    is 'pair<const Key, Value>' and '__node_value_type' is '__hash_value_type'.
    
  * Switch almost all overloads in '__hash_table' previously taking 'value_type'
    (AKA '__node_value_type) to take  '__container_value_type' instead. Previously
    'pair<K, V>' would be implicitly converted to '__hash_value_type<K, V>' because
    of the function signature.
    
  * Add '__get_key', '__get_value', '__get_ptr', and '__move' static functions to
    '__key_value_types'. These functions allow '__hash_table' to unwrap
    '__node_value_type' objects into '__container_value_type' and its sub-parts.

  * Pass  '__hash_value_type::__value_'  to 'a.construct(p, ...)' instead of
    '__hash_value_type' itself. The C++14 standard requires that 'a.construct()'
    and 'a.destroy()' are only ever instantiated for the containers value type.

  * Remove '__hash_value_type's constructors and destructors. We should never
    construct an instance of this type.
    (TODO this is UB but we already do it in plenty of places).
  
  * Add a generic "try-emplace" function to '__hash_table' called
    '__emplace_unique_key_args(Key const&, Args...)'.

  
The following changes were done as cleanup:

  * Introduce the '_LIBCPP_CXX03_LANG' macro to be used in place of
    '_LIBCPP_HAS_NO_VARIADICS' or '_LIBCPP_HAS_NO_RVALUE_REFERENCE'.
    
  * Cleanup C++11 only overloads that assume an incomplete C++11 implementation.
    For example this patch removes the __construct_node overloads that do
    manual pack expansion.
    
  * Forward 'unordered_map::emplace' to '__hash_table' and remove dead code
    resulting from the change. This includes almost all
    'unordered_map::__construct_node' overloads.


The following changes are planed for future revisions:

  * Fix LWG issue #2469 by delegating 'unordered_map::operator[]' to use
    '__emplace_unique_key_args'.
    
  * Rewrite 'unordered_map::try_emplace' in terms of '__emplace_unique_key_args'.
  
  * Optimize '__emplace_unique' to call '__emplace_unique_key_args' when possible.
    This prevent unneeded allocations when inserting duplicate entries.


The additional follow up work needed after this patch:

  * Respect the lifetime rules for '__hash_value_type' by actually constructing it.
  * Make '__insert_multi' act similar to '__insert_unique' for objects of type
    'T&' and 'T const &&' with 'T = __container_value_type'.
  
  

llvm-svn: 260513
2016-02-11 11:59:44 +00:00
Eric Fiselier d262b368d5 Remove changes that snuck in within r260431
llvm-svn: 260443
2016-02-10 21:58:36 +00:00
Evgeniy Stepanov 3e58a6a7b2 Fix invalid casts in <functional>.
static_cast of a pointer to object before the start of the object's
lifetime has undefined behavior.

This code triggers CFI warnings.

This change replaces C-style casts with reinterpret_cast, which is
fine per the standard, add applies an attribute to silence CFI (which
barks on reinterpret_cast, too).

llvm-svn: 260441
2016-02-10 21:53:28 +00:00
Eric Fiselier 75d0dcfde7 Recommit r260012 - Cleanup node-type handling in the unordered containers.
This time I kept <ext/hash_map> working!

This patch is the first in a series of patches that's meant to better
support unordered_map. unordered_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 __hash_table about this
special value_type.

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

As a result of this change all of the unordered containers now all support
incomplete types.

As a drive-by fix I changed the difference_type in __hash_table to always
be ptrdiff_t. There is a corresponding change to size_type but it cannot
take affect until an ABI break.

This patch will be followed up shortly with fixes for various unordered_map
bugs and problems.

llvm-svn: 260431
2016-02-10 20:46:23 +00:00
Ben Craig d32611211d Limit catopen usage to unix-like OSes
Operating systems that are not unix-like are unlikely to have access to
catopen. Instead of black-listing each one, we now filter out all non-unix
operating systems first. We then exclude the unix-like operating systems
that don't have catopen. _WIN32 counts as a unix-like operating system
because of cygwin.

http://reviews.llvm.org/D16639

llvm-svn: 260381
2016-02-10 13:47:25 +00:00
Richard Smith 5fd17ab1b0 Fix overload sets of strchr, strpbrk, strrchr, memchr and strstr from
<string.h> and wcschr, wcspbrk, wcsrchr, wmemchr, and wcsstr from <wchar.h> to
provide a const-correct overload set even when the underlying C library does
not.

This change adds a new macro, _LIBCPP_PREFERRED_OVERLOAD, which (if defined)
specifies that a given overload is a better match than an otherwise equally
good function declaration without the overload. This is implemented in modern
versions of Clang via __attribute__((enable_if)), and not elsewhere.

We use this new macro to define overloads in the global namespace for these
functions that displace the overloads provided by the C library, unless we
believe the C library is already providing the correct signatures.

llvm-svn: 260337
2016-02-10 00:59:02 +00:00
Vasileios Kalintiris 7432c0472d Revert "Introduce a cmake module to figure out whether we need to link with libatomic."
This reverts commit r260235. It breaks LLVM's bootstrap when building
with a -gcc-toolchain and the system's gcc installation does not provide
the libatomic library and its headers. We should check whether
LIBCXX_GCC_TOOLCHAIN is set and adjust the flags accordingly.

llvm-svn: 260323
2016-02-09 23:38:28 +00:00
Vasileios Kalintiris cca79b8700 Introduce a cmake module to figure out whether we need to link with libatomic.
Summary:
This fixes the tests under std/atomics for 32-bit MIPS CPUs where the
8-byte atomic operations call into the libatomic library.

Reviewers: dsanders, mclow.lists, EricWF, jroelofs, joerg

Subscribers: cfe-commits

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

llvm-svn: 260235
2016-02-09 17:00:38 +00:00
Marshall Clow a0cd4374d8 Minor updates to failing tests. NFC
llvm-svn: 260202
2016-02-09 06:38:56 +00:00
Saleem Abdulrasool 38fc9fe197 Use the reserved spellings for attributes
Change the no_sanitize attribute to use the reserved spelling.

llvm-svn: 260195
2016-02-09 04:05:37 +00:00
Eric Fiselier 20af59e38c Revert r260012 due to __gnu_cxx::hash_map breakage
llvm-svn: 260172
2016-02-08 23:47:13 +00:00
Marshall Clow d77ed5a1a9 Clean up a test; get rid of hard-wired char/wchar_t code for template fns that take any char type. Prep work for PR#26503
llvm-svn: 260115
2016-02-08 17:38:23 +00:00
Saleem Abdulrasool 163333f912 build: silence warnings in in-tree build
Avoid the developer warnings from cmake when configuring libc++ as part of the
LLVM layout.  Setup the custom macro paths earlier to re-use the detection logic
prior to setting the project properties.

llvm-svn: 260071
2016-02-08 03:50:18 +00:00
Eric Fiselier 1b2e4ffa58 Cleanup node-type handling in the unordered containers
This patch is the first in a series of patches that's meant to better
support unordered_map. unordered_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 __hash_table about this
special value_type.

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

As a result of this change all of the unordered containers now all support
incomplete types.

As a drive-by fix I changed the difference_type in __hash_table to always
be ptrdiff_t. There is a corresponding change to size_type but it cannot
take affect until an ABI break.

This patch will be followed up shortly with fixes for various unordered_map
fixes.

llvm-svn: 260012
2016-02-07 00:36:33 +00:00
Niels Ole Salscheider ff56c1c6a0 Fix the search path for CMake files
This allows to find the LLVM's CMake files after moving them in
r259821.

llvm-svn: 259842
2016-02-04 23:17:20 +00:00
Duncan P. N. Exon Smith f42ef3efca re.results.form: Format out-of-range subexpression references as null
Rather than crashing in match_results::format() when a reference to a
marked subexpression is out of range, format the subexpression as empty
(i.e., replace it with an empty string).  Note that
match_results::operator[]() has a range-check and returns a null match
in this case, so this just re-uses that logic.

llvm-svn: 259682
2016-02-03 19:30:20 +00:00
Alexey Samsonov f094e0f3e3 [docs] Remove references to autoconf build.
llvm-svn: 259281
2016-01-30 01:11:42 +00:00
Ben Craig 7d00f97048 [libcxx] Whitelist inclusion of sysctl.h instead of blacklisting
Instead of excluding all known operating systems that are not derived from BSD,
I now include all operating systems that claim to be derived from BSD.
Hopefully, that will make it so that this check doesn't need to change for
every new operating system that comes along.

http://reviews.llvm.org/D16634

llvm-svn: 259193
2016-01-29 13:53:23 +00:00
Eugene Zelenko 244da049d0 Remove autoconf support.
Differential revision: http://reviews.llvm.org/D16651

llvm-svn: 259091
2016-01-28 21:00:21 +00:00
Daniel Sanders ea59b9d91f [libcxx] Work around for clang calling GAS after having already failed.
Summary:
This is a workaround to a clang bug which causes libcxx tests to fail in the 3.8
release. The clang bug is currently being investigated. It seems that clang
does not stop after frontend errors when using -verify and -fno-integrated-as
(or when this is the default). This patch adds -fsyntax-only to prevent GAS
from being called, fixing the libcxx failures.

PR26277

Patch by Eric Fiselier

Reviewers: mclow.lists, hans, EricWF

Subscribers: cfe-commits

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

llvm-svn: 259046
2016-01-28 13:49:33 +00:00
Akira Hatanaka 208ee5a09d [libcxx] Remove pragmas that were needed to suppress warnings produced
by -Wpadded.

We don't need these pragmas anymore because -Wpadded was removed from
buildit in r258900.

llvm-svn: 259023
2016-01-28 06:13:36 +00:00
Marshall Clow 21c38f261f Left a file out of r259014
llvm-svn: 259015
2016-01-28 04:15:35 +00:00
Marshall Clow e046bbdded implement ostream_joiner. Reviewed as http://reviews.llvm.org/D16605
llvm-svn: 259014
2016-01-28 04:14:56 +00:00
Daniel Sanders 90c86ea5f1 [libcxx] Additional 'REQUIRE' directives for tests that require en_US.UTF-8.
Summary:
These are the tests that didn't fail in the release candidate because they were
covered by another 'REQUIRES' directive.

Reviewers: mclow.lists, hans, bcraig, EricWF

Subscribers: EricWF, dim, cfe-commits

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

llvm-svn: 258920
2016-01-27 10:45:07 +00:00
Akira Hatanaka 6fa38f5ba5 [libcxx] Remove -Wpadded from buildit script.
Per discussion with Eric and Joerg, this commit removes -Wpadded to
silence the warning about the padding inserted at the tail of struct
_Rep_base.

rdar://problem/23932550

llvm-svn: 258900
2016-01-27 01:55:11 +00:00
Eric Fiselier 4de5f98699 Fix broken commit r258888. I missed adding two pointer conversions
llvm-svn: 258893
2016-01-27 00:49:20 +00:00
Eric Fiselier 07b9cd36fa [libcxx] Fix undefined behavior in forward_list
Summary:
This patch is similar to the <list> fix but it has a few differences. This patch doesn't use a `__link_pointer` typedef because we don't need to change the linked list pointers because `forward_list` never stores a  `__forward_begin_node` in the linked list itself. 

The issue with `forward_list` is that the iterators store pointers to `__forward_list_node` and not `__forward_begin_node`. This is incorrect because `before_begin()` and `cbefore_begin()` return iterators that point to a `__forward_begin_node`. This means we incorrectly downcast the `__forward_begin_node` pointer to a `__node_pointer`. This downcast itself is sometimes UB but it cannot be safely removed until ABI v2. The more common cause of UB is when we deference the downcast pointer. (for example `__ptr_->__next_`). This can be fixed without an ABI break by upcasting `__ptr_` before accessing it.

The fix is as follows:

1. Introduce a `__iter_node_pointer` typedef that works  similar to `__link_pointer` in the last patch. In ABI v2 it is always a typedef for `__begin_node_pointer`.
2. Change the `__before_begin()` method to return the correct pointer type (`__begin_node_pointer`),
    Previously it incorrectly downcasted  the  `__forward_begin_node` to a `__node_pointer`  so it could be used to constructor the iterator types.
3. Change `__forward_list_iterator` and `__forward_list_const_iterator`  in the following way:
    1. Change `__node_pointer __ptr_;` member to  have the `__iter_node_pointer` type instead. 
    2. Add additional private constructors that accept `__begin_node_pointer` in addition to `__node_pointer` and then correctly cast them to the stored `__iter_node_pointer` type. 
    3. Add  `__get_begin()` and `__get_node_unchecked()` accessor methods that correctly cast `__ptr_` to the expected pointer type. `__get_begin()` is always safe to use and should be 
       preferred. `__get_node_unchecked()` can only be used on a deferencible iterator.
4. Replace direct access to `__forward_list_iterator::__ptr_`  with the safe accessor methods.
  


Reviewers: mclow.lists, EricWF

Subscribers: cfe-commits

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

llvm-svn: 258888
2016-01-27 00:11:54 +00:00
Eric Fiselier 0d662acc7c Remove dead code missed in r258852.
llvm-svn: 258855
2016-01-26 20:31:01 +00:00
Eric Fiselier 060cc200d0 Fix PR26103 - Error calling is_convertible with incomplete type. Patch from Michael Daniels.
llvm-svn: 258852
2016-01-26 20:24:30 +00:00
Marshall Clow 0aa1ccb0d9 Implement LWG#2385; remove the allocator-aware std::function::assign call. It was useless, and didn't actually *do anything* with the allocator. Now it's gone. On the off chance that someone is mistakenly calling it, it's only gone in C++1z
llvm-svn: 258697
2016-01-25 17:29:55 +00:00
Duncan P. N. Exon Smith ad783ce909 Revert "unordered_map: Reuse insert logic in emplace when possible, NFC"
This reverts commit r258575.  EricWF sent me an email (no link since it
was off-list) requesting to review this pre-commit instead of
post-commit.

llvm-svn: 258625
2016-01-23 15:12:47 +00:00
Marshall Clow c38568f660 Fix test to pass in C++03
llvm-svn: 258593
2016-01-23 01:02:29 +00:00
Duncan P. N. Exon Smith 8af8a407fe unordered_map: Reuse insert logic in emplace when possible, NFC
An upcoming commit will add an optimization to insert() that avoids
unnecessary mallocs when we can safely extract the key type.  This
commit shares code between emplace() and insert():
- if emplace() is given a single argument, and
- value_type is constructible from that argument
so that we have a single code path for the two.

I also updated the debug version of emplace_hint() to defer to
emplace(), like the non-debug version does.

In both cases, there should be NFC here.

llvm-svn: 258575
2016-01-22 22:48:02 +00:00
Duncan P. N. Exon Smith a584f0008a unordered: Rename __construct_node_hash() to allow forwarding, NFC
Rename the version of __construct_node() that takes a hash as an
argument to __construct_node_hash(), and use perfect-forwarding when
Rvalue references are available.  The primary motivation is to allow
other types through, since unordered_map's value_type is different from
__hash_table's value_type -- a follow-up will take advantage of this --
but the rename is general "goodness".

There should be no functionality change here (aside from enabling the
follow-up).

llvm-svn: 258511
2016-01-22 18:27:26 +00:00
Eric Fiselier d033ad21d0 Add __uncvref type for use in later patches
llvm-svn: 258491
2016-01-22 06:25:47 +00:00
Marshall Clow fcdb19904c Implement LWG#2101 'Some transformation types can produce impossible types' Introduced a new (internal) type trait '__is_referenceable' with tests. Use that trait in add_lvalue_reference, add_rvalue_reference and add_pointer.
llvm-svn: 258418
2016-01-21 18:22:43 +00:00
Daniel Sanders 61c115f32c [libcxx] Add appropriate 'REQUIRE' directives to tests that require en_US.UTF-8.
Reviewers: mclow.lists, hans

Subscribers: bcraig, cfe-commits

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

llvm-svn: 258403
2016-01-21 15:35:15 +00:00
Eric Fiselier 48c3483f45 Use TEST_STD_VER instead of __has_feature to detect noexcept. This fixes the test with GCC.
llvm-svn: 258292
2016-01-20 05:44:11 +00:00
Marshall Clow e612a8877a More string fixes for noexcept cases. Apparently I didn't get them all in r258281.
llvm-svn: 258291
2016-01-20 05:41:24 +00:00
Eric Fiselier 6469c3ec17 Mark some test XFAIL for GCC 4.9 due to missing is_trivial* traits
llvm-svn: 258287
2016-01-20 04:59:57 +00:00
Marshall Clow 64ca6868f5 Got the test backwards in r258279. Fixed that and de-tabbed
llvm-svn: 258281
2016-01-20 03:37:46 +00:00
Marshall Clow 9d10d27c67 Fix up the tests I added for string exceptions to be skipped when exceptions are disabled
llvm-svn: 258279
2016-01-20 03:19:15 +00:00
Eric Fiselier 19352b1cbe Add link to 3rd party GDB pretty-printers
llvm-svn: 258270
2016-01-20 01:26:30 +00:00
Eric Fiselier c467208791 Fix enviroment variables when running shell scripts
llvm-svn: 258217
2016-01-19 23:06:29 +00:00
Eric Fiselier eb2ff93b14 Add more missing license headers
llvm-svn: 258198
2016-01-19 21:58:49 +00:00
Eric Fiselier 38236b5750 Add missing license headers
llvm-svn: 258196
2016-01-19 21:52:04 +00:00
Eric Fiselier 8132bdc8e1 Mark slow ASAN/MSAN tests as XFAIL for now.
llvm-svn: 258195
2016-01-19 21:51:07 +00:00
Marshall Clow b414b2f54b Fix PR#26175. Thanks to Josh Petrie for the report and the patch. Reviewed as http://reviews.llvm.org/D16262
llvm-svn: 258107
2016-01-19 00:50:37 +00:00
Jonathan Roelofs 8dfe504bad Tame a -Wunknown-attributes warning
llvm-svn: 257707
2016-01-13 23:27:08 +00:00
Marshall Clow a015d39239 Better comments in test. NFC
llvm-svn: 257702
2016-01-13 23:05:15 +00:00
Marshall Clow 3dd0ff3b62 Fix test for C++03 - lacking noexcept
llvm-svn: 257696
2016-01-13 22:52:36 +00:00
Marshall Clow 76b4afc040 Fix PR#25973 : 'basic_string::assign(InputIt, InputIt) doesn't provide the strong exception safety guarantee'. This turned out to be a pervasive problem in <string>, which required a fair amount of rework. Add in an optimization for when iterators provide noexcept increment/comparison/assignment/dereference (which covers many of the iterators in libc++). Reviewed as http://reviews.llvm.org/D15862
llvm-svn: 257682
2016-01-13 21:54:34 +00:00
Hans Wennborg 3f01e7a62e Update version to 3.9
llvm-svn: 257629
2016-01-13 17:33:21 +00:00
Dan Gohman 4a9e173e08 [WebAssembly] Set std::numeric_limits's traps field for WebAssembly.
WebAssembly's integer division instruction traps on division by zero; set the
traps field of integral std::numeric_limits to true.

llvm-svn: 257612
2016-01-13 16:32:00 +00:00
Marshall Clow df5ddf2c7a One more missing std:: qualification from Jonathan
llvm-svn: 257506
2016-01-12 19:15:10 +00:00
Marshall Clow 8d113d430f Add a bunch of missing includes in the test suite to make it more portable. Fixes bugs #26120 and #26121. Thanks to Jonathan Wakely for the reports and the patches.
llvm-svn: 257474
2016-01-12 14:51:04 +00:00
Marshall Clow 7087a51b13 Put the definition of _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK in the right place.
llvm-svn: 257422
2016-01-12 00:38:04 +00:00
Marshall Clow ec880422df Preemptively disable unsigned integer sanitization in 32 and 64 bit versions of __murmur2_or_cityhash. This lets people use the unsigned integer overflow checker in UBSAN w/o getting hits from libc++'s hash code (where the unsigned integer overflow is legal and deliberate)> Patch by @danielaustin. Reviewed as: http://reviews.llvm.org/D15973
llvm-svn: 257368
2016-01-11 19:27:10 +00:00
Evgeniy Stepanov c86b392078 Revert "Remove visibility attributes from out-of-class method definitions in iostreams."
llvm-svn: 257193
2016-01-08 19:21:02 +00:00
Ahmed Bougacha 812d65a26a [libcxx] Set LC_ALL rather than LC_COLLATE to override collation.
r251131 replaced LANG with LC_COLLATE. But LC_ALL has precedence
over both, so the test still fails when LC_ALL=C.

llvm-svn: 257018
2016-01-07 02:36:09 +00:00
Marshall Clow 652a2ce191 Add explicit include directives; the file was getting implicitly included already. NFC
llvm-svn: 256864
2016-01-05 19:53:31 +00:00
Marshall Clow fd495892d6 Remove some test scaffolding that I added and then didn't need. No functional change
llvm-svn: 256861
2016-01-05 19:44:58 +00:00
Marshall Clow afc9ff99ec First half of LWG#2354: 'Unnecessary copying when inserting into maps with braced-init syntax'
llvm-svn: 256859
2016-01-05 19:32:41 +00:00
Ahmed Bougacha 4d315f1300 [libcxx] Fix typo in darwin target_info.py introduced by r256621.
llvm-svn: 256772
2016-01-04 19:35:40 +00:00
Eric Fiselier 67ac709e4c Print stacktrace with UBSAN
llvm-svn: 256729
2016-01-04 03:54:58 +00:00
Eric Fiselier 5243e190a7 Remove unsafe "__as_link()" cast member function.
"__as_link()" can only be used safely on "__list_node" objects. This patch
moves the "__as_link()" member function from "__list_node_base" to "__list_node"
so it cannot be used incorrectly.

Unsafe downcasts now use a non-member function so we don't defer the type-punned
pointer.

llvm-svn: 256727
2016-01-04 03:27:52 +00:00
Eric Fiselier 934b092186 Use __rebind_pointer to avoid #ifdef block
llvm-svn: 256654
2015-12-30 21:52:00 +00:00
Eric Fiselier b88ea354fe [libcxx] Fix for ALL undefined behavior in <list>.
Summary:
This patch fixes std::list for builtin pointer types in the current ABI version and fixes std::list for all fancy pointer types in the next ABI version. The patch was designed to minimize the amount of code needed to support both ABI configurations. Currently only ~5 lines of code differ.


Reviewers: danalbert, jroelofs, mclow.lists

Subscribers: dexonsmith, awi, cfe-commits

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

llvm-svn: 256652
2015-12-30 20:57:59 +00:00
Eric Fiselier d57bcda1cb Fix locale feature testing in test suite.
llvm-svn: 256621
2015-12-30 04:45:42 +00:00
Eric Fiselier d888cf50c6 Revert r256606 due to compiler-rt sanitizer bot failures
llvm-svn: 256614
2015-12-30 03:39:03 +00:00
Eric Fiselier bb60f19584 Cleanup CMake for out-of-tree builds
llvm-svn: 256606
2015-12-30 01:02:38 +00:00
Eric Fiselier 7481ac43a5 Fix test failure in 32 bit mode
llvm-svn: 256598
2015-12-29 23:19:00 +00:00
Eric Fiselier ad41a2f480 Mark LWG defect #2367 as complete
llvm-svn: 256597
2015-12-29 23:18:27 +00:00
Ben Craig d38f60270c [libcxx] Fixing the Mac / Darwin build
llvm-svn: 256594
2015-12-29 23:01:07 +00:00
Ben Craig 8de2f0cf01 [libcxx] Fixing silly mistake from last commit.
Tested on Linux x86_64 targeting Linux x86_64.

llvm-svn: 256592
2015-12-29 22:55:55 +00:00
Ben Craig e238372258 [libcxx] Fixing the Linux sanitizer builds
llvm-svn: 256591
2015-12-29 22:43:17 +00:00
Ben Craig 90bee6354d [libcxx] Refactoring target_info.py
This patch makes it easier to support running the lit tests for new and
unusual platforms. It will break existing users that set
LIBCXX_TARGET_INFO to anything other than the default. I think this is
fine, because the old LIBCXX_TARGET_INFO wasn't terribly useful.

The old way of supporting the different test platforms was to have
conditional code scattered throughout config.py. New platforms would need
to add conditionals there. Alternatively, the new platform could set
no_default_flags to true, and reconstitue almost the entire compile and
link line, including things that don't vary across platforms.

The new way of supporting new platforms is to create a new target info
class, and have make_target_info return an instance of it. For platforms
supported in-tree, that will be done by modifying make_target_info. For
out-of-tree platforms, users can set LIBCXX_TARGET_INFO at cmake configure
time.

The target info sub-classes can provide fine-grained information back to
config.py. The hooks that will most commonly be provided will be
add_cxx_compile_flags and add_cxx_link_flags. These hooks can provide the
platform specific flags, while letting config.py handle all the invariant
flags.

Target info hooks were added for each area that the existing config.py had
platform specific behavior. config.py is now mostly free of platform
specific conditionals.

This patch was tested on Linux x86_64. I both targeted Linux x86_64, and
an out-of-tree platform with a custom target_info. In both cases I was
able to run libcxx and libcxxabi tests. I do not have access to FreeBSD,
Darwin, or Windows machines that are set up for lit testing.

llvm-svn: 256588
2015-12-29 22:21:38 +00:00
Eric Fiselier 7a608aa232 [libcxx] Fix LWG Issue #2367 - Fixing std::tuple and std::pair's default constructors.
Summary: This patch implements the solution for LWG Issue #2367. See http://cplusplus.github.io/LWG/lwg-active.html#2367

Reviewers: mclow.lists, EricWF

Subscribers: cfe-commits

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

llvm-svn: 256325
2015-12-23 08:20:26 +00:00
Eric Fiselier 51b9de4c7c Fix type in tuple test. Sorry for the noise
llvm-svn: 255944
2015-12-18 01:04:36 +00:00
Eric Fiselier 545b8861fc [libcxx] LWG2485: get() should be overloaded for const tuple&&. Patch from K-Ballo.
Review: http://reviews.llvm.org/D14839
llvm-svn: 255941
2015-12-18 00:36:55 +00:00
Eric Fiselier 6627c70df7 Add CMake option LIBCXX_CONFIGURE_IDE to allow for other IDE's.
CLion needs similar configuration changes as MSVC_IDE and XCODE.

llvm-svn: 255851
2015-12-16 23:41:05 +00:00
Eric Fiselier e2e332a50e Make noexcept specifications on __hash_table definitions match their declarations.
llvm-svn: 255738
2015-12-16 00:53:04 +00:00
Eric Fiselier af5b54a249 Workaround nasty GCC bug that caused testsuite to hang
llvm-svn: 255734
2015-12-16 00:35:45 +00:00
Eric Fiselier 8087ddd1e6 Remove unused _LIBCPP_HAS_NO_ALWAYS_INLINE_VARIADICS macro
llvm-svn: 255686
2015-12-15 22:19:03 +00:00
Eric Fiselier 8dcfcf79ab [libcxx] Enable noexcept for GCC 4.6 and greater
Summary:
This patch allows GCC 4.6 and above to use `noexcept` as opposed to `throw()`. 

Is it an ABI safe change to suddenly switch on `noexcept`? I imagine it must be because it's disabled in w/ clang in C++03 but not C++11.


Reviewers: danalbert, jroelofs, mclow.lists

Subscribers: cfe-commits

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

llvm-svn: 255683
2015-12-15 22:16:47 +00:00
Eric Fiselier fd10d98ed0 Mark declarations of externally instantiated functions as inline so GCC doesn't complain.
llvm-svn: 255599
2015-12-15 01:41:41 +00:00
Eric Fiselier 831c112954 Fix various GCC mis-configurations for newer versions.
This patch goes through and enables C++11 and C++14 features for newer GCC's.
The main changes are:

1. Turn on variable templates. (Uses __cpp_variable_templates)
2. Assert atomic<Tp> is trivially copyable (Uses _GNUC_VER >= 501).
3. Turn on trailing return support for GCC. (Uses _GNUC_VER >= 404)
4. XFAIL void_t test for GCC 5.1 and 5.2. Fixed in GCC 6.

llvm-svn: 255585
2015-12-15 00:32:21 +00:00
Eric Fiselier 08ce75b6c6 Update paths in libc++ build instructions. Patch from Jonathan Anderson.
llvm-svn: 255561
2015-12-14 22:26:28 +00:00
Eric Fiselier d5262627eb Update how libc++/libc++abi link the tests. Follow up on r255559.
llvm-svn: 255560
2015-12-14 22:24:19 +00:00
Marshall Clow 6e07ccdfe1 K-Ballo pointed out a mistake in the add_lvalue_ref tests I checked in; now more of them are passing. Thanks
llvm-svn: 255519
2015-12-14 18:11:51 +00:00
Marshall Clow 25090a91bb Missed this on the previous (255517) commit
llvm-svn: 255518
2015-12-14 18:02:23 +00:00
Marshall Clow 94b5bc4263 Fix a corner case that involved calling rethrow_if_nested with a type that had a deleted operator&. Added a test to catch this as well. Thanks to Ville for the heads-up.
llvm-svn: 255517
2015-12-14 18:01:56 +00:00
Marshall Clow 161eae2daa Add add_lvalue_ref tests for a few function types, with a note why not more
llvm-svn: 255513
2015-12-14 17:34:03 +00:00
Evgeniy Stepanov 2abfe726b2 Replace cmake check for printf with a check for fopen.
Printf is a builtin, and the check fails with -Werror because of a clang
warning about an incompatible redeclaration.

llvm-svn: 255187
2015-12-10 00:45:18 +00:00
Eric Fiselier 6a8678edee Remove redundant _LIBCPP_ALWAYS_INLINE attribute from __convert_to_integral overloads
llvm-svn: 255185
2015-12-10 00:43:37 +00:00
Evgeniy Stepanov 26ba3870bf Remove visibility attributes from out-of-class method definitions in iostreams.
No point in pretending that these methods are hidden - they are
actually exported from libc++.so. Extern template declarations make
them part of libc++ ABI.

This patch does not change libc++.so export list (at least on Linux).

llvm-svn: 255177
2015-12-09 23:42:30 +00:00
Evgeniy Stepanov 02b8e94943 Add 3 more missing inline/visibility attributes.
These are the cases when an out-of-class definition of a method is
marked _LIBCPP_INLINE_VISIBILITY, but the in-class declaration is
not. This will start failing when (or if) we switch to
attribute((internal_linkage)).

llvm-svn: 255166
2015-12-09 22:32:36 +00:00
Eric Fiselier fff5ec035b Use __make_integer_seq builtin for std::make_integer_sequence. Patch by K-ballo.
llvm-svn: 255162
2015-12-09 22:03:06 +00:00
Marshall Clow 146c640e81 Cleaned up the intro for the TS status page; really need much more info here
llvm-svn: 254971
2015-12-08 00:08:23 +00:00
Chris Bieneman a1b79aeab9 [CMake] If you're not installing the libcxx library, exclude it from the "all" target so it doesn't get built when you run "ninja install"
This is just a build dependency optimization. Running check-libcxx will still build libcxx and function as expected, it just removes libcxx from the all build and install targets.

llvm-svn: 254628
2015-12-03 18:52:54 +00:00
Marshall Clow b8427293df Last bit of P0006; mark it as complete
llvm-svn: 254290
2015-11-30 05:39:30 +00:00
Marshall Clow 12dff9e66a Fix bugs in alignment_of_v, etc. Re-enable the newly added tests
llvm-svn: 254289
2015-11-30 05:20:00 +00:00
Marshall Clow 00b6b01592 Temporarily disable new tests while I figure out what's going on
llvm-svn: 254288
2015-11-30 05:15:10 +00:00
Marshall Clow c8f3816e63 Fix bad macros
llvm-svn: 254287
2015-11-30 05:10:10 +00:00
Marshall Clow 825a9edb2e Missing file from last commit
llvm-svn: 254286
2015-11-30 05:04:48 +00:00
Marshall Clow 4ddfaea773 Implement more of P0006; Type Traits Variable Templates. <ratio>
llvm-svn: 254285
2015-11-30 05:04:22 +00:00
Marshall Clow 803a8bb105 Fix bad macros in tests
llvm-svn: 254284
2015-11-30 05:03:35 +00:00
Marshall Clow e12a536d76 Implement more of P0006; Type Traits Variable Templates.
llvm-svn: 254283
2015-11-30 04:30:02 +00:00
Marshall Clow 94f89aeec5 Add static_assert to set/multiset/map/multimap/forward_list/deque that the allocator's value_type match the container's value_type. vector/unordered/list/string already do this. Add tests for all the containers to verify this.
llvm-svn: 254119
2015-11-26 01:24:04 +00:00
Marshall Clow 9d73243bc1 Silence a -Wmissing-braces warning in the tests; mbstate_t is defined differently on different C libraries.
llvm-svn: 254050
2015-11-25 01:06:36 +00:00
Marshall Clow e0312a3047 Remove undefined behavior from tests; specifically, ensure that the value type of the allocators match the value type of the containers
llvm-svn: 254030
2015-11-24 22:10:51 +00:00
Vasileios Kalintiris 08010b5a0c Use libcxx's default rune table with the Musl C library.
Summary:
Also, there are no exported character type tables from Musl so we have to
Fallback to the standard functions. This reduces the number of libcxx's
test-suite failures down to ~130 for MIPS. Most of the remaining failures
come from the atomics (due to the lack of 8-byte atomic-ops in MIPS32) and
thread tests.

Reviewers: mclow.lists, EricWF, dalias, jroelofs

Subscribers: tberghammer, danalbert, srhines, cfe-commits

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

llvm-svn: 253972
2015-11-24 10:24:54 +00:00
Marshall Clow bfb3f2bf7d Fix some mistakes in the <utility> and <tuple> synopses. No functional change. Thannks to K-ballo for the patch
llvm-svn: 253593
2015-11-19 19:45:29 +00:00
Marshall Clow 5fcc8169ed Fix some mistakes in the <array> synopsis. No functional change. Thanks to K-ballo for the patch
llvm-svn: 253592
2015-11-19 19:41:04 +00:00
Eric Fiselier 1f6e22d1cc Fix bad variable name. project_root -> project_obj_root
llvm-svn: 253382
2015-11-17 21:48:29 +00:00
Marshall Clow 1867554cc6 Add tests for the extended integer types - as required by LWG#2119
llvm-svn: 253376
2015-11-17 21:04:24 +00:00
Marshall Clow dbd2d32892 Implement P0007: Constant View: A proposal for a std::as_const helper function template.
llvm-svn: 253274
2015-11-17 00:08:08 +00:00
Marshall Clow 28ec78e7a5 Fix compile error in test. Can't use `operator[]` for multimap.
llvm-svn: 253271
2015-11-16 23:40:27 +00:00
Marshall Clow b90e350017 More tests for LWG#2156
llvm-svn: 253257
2015-11-16 22:18:36 +00:00
Marshall Clow a9197737f9 LWG#2156 loosened the requirements on unordered containers 'rehash' calls. Add tests to make sure we meet these requirements. Since we met the stricter ones, no code change needed to meet the looser ones.
llvm-svn: 253223
2015-11-16 16:42:16 +00:00
Marshall Clow dd1b261f3a Implement P0013R1: Logical Operator Type Traits. Make a hidden implementation (__and_, __or_, and __not_) so that we can use them elsewhere in non-C++17 code - for example, in the LFTS
llvm-svn: 253215
2015-11-16 15:54:13 +00:00
Marshall Clow 7d5264fa44 Mark P0013 as 'in progress'
llvm-svn: 253212
2015-11-16 15:05:09 +00:00
Marshall Clow 183c010c9a Implement P0074: Making owner_less more flexible
llvm-svn: 252905
2015-11-12 15:56:44 +00:00
Asiri Rathnayake ea4282d336 [libcxx] Fixup a few fumbles in the initial no-exceptions XFAILs list.
The initial buildbot run found a few missing bits in the initial XFAIL list
for the no-exceptions libc++ variant. These discrepancies are as follows:

[1] Following two tests need XFAILs on the no-exceptions library variant.
My local runs had these two disabled for other reasons (unsupported):

  - localization/locales/locale/locale.cons/char_pointer.pass.cpp
  - numerics/complex.number/complex.ops/complex_divide_complex.pass.cpp

[2] These three does not need XFAILs, they were failing on my local runs for
other reasons:

  - depr/depr.c.headers/uchar_h.pass.cpp
  - input.output/iostreams.base/ios/basic.ios.members/copyfmt.pass.cpp
  - .../category.collate/locale.collate.byname/transform.pass.cpp

(these are failing on my box for the default build as well)

The current patch fixes both the cases above. Additionally, I've run the
following scan to make sure I've covered all the cases:

> grep ' catch \| try \| throw ' -R . | perl -pe 's|(.*?):.*|\1|' | sort | \
  uniq > 1.txt
> grep 'libcpp-no-exceptions' -R . | perl -pe 's|(.*?):.*|\1|' | sort | \
  uniq > 2.txt
> diff 1.txt 2.txt

This showed up a few extra interesting cases:

[3] These two tests do not use try/catch/throw statements, but they fail at
runtime. Need to be investigated, I've left the XFAILs in.

  - std/thread/futures/futures.shared_future/dtor.pass.cpp
  - std/thread/futures/futures.unique_future/dtor.pass.cpp

[4] These tests use a macro named TEST_HAS_NO_EXCEPTIONS to conditionally
exclude try/catch/throw statements when running without exceptions. I'm not
entirely sure why this was needed (AFAIK, we didn't have a no-exceptions
library build before). The macro's defintion is quite similar to that of
_LIBCPP_NO_EXCEPTIONS. I will investigate if this can be reused for my test
fixes or if it should be replaced with _LIBCPP_NO_EXCEPTIONS.

  - std/experimental/any/*

Change-Id: I9ad1e0edd78f305406eaa0ab148b1ab693f7e26a
llvm-svn: 252870
2015-11-12 10:41:57 +00:00
Marshall Clow d1180f4abc Fix typo I just introduced.
llvm-svn: 252614
2015-11-10 16:10:17 +00:00
Marshall Clow 41277d179f std:: qualify ptrdiff_t in the test. Thanks to Walter for the catch
llvm-svn: 252613
2015-11-10 16:04:13 +00:00
Marshall Clow d17405fe9c Walter pointed out some missing includes in the tests. Fixing the includes uncovered a couple bugs in the _v type traits. Fixed those, too
llvm-svn: 252612
2015-11-10 15:48:23 +00:00
Marshall Clow bfba968360 Explicitly #include <utility> so that we get std::move. Thanks to Walter for the bug report.
llvm-svn: 252610
2015-11-10 15:22:08 +00:00
Asiri Rathnayake f520c1445f Make it possible to build a no-exceptions variant of libcxx.
Fixes a small omission in libcxx that prevents libcxx being built when
-DLIBCXX_ENABLE_EXCEPTIONS=0 is specified.

This patch adds XFAILS to all those tests that are currently failing
on the new -fno-exceptions library variant. Follow-up patches will
update the tests (progressively) to cope with the new library variant.

Change-Id: I4b801bd8d8e4fe7193df9e55f39f1f393a8ba81a
llvm-svn: 252598
2015-11-10 11:41:22 +00:00
Marshall Clow 8f8cdf34ac Mark LWG#2486 as complete. Eric did this as part of r242959
llvm-svn: 252509
2015-11-09 20:49:15 +00:00
NAKAMURA Takumi 4c9c937542 Make check-libcxx Py3-compatible.
llvm-svn: 252458
2015-11-09 10:55:04 +00:00
Vasileios Kalintiris 8c58e92cd8 Add initial support for the MUSL C library.
Summary:
This patch adds the LIBCXX_LIBC_IS_MUSL cmake option to allow the
building of libcxx with the Musl C library. The option is necessary as
Musl does not provide any predefined macro in order to test for its
presence, like GLIBC. Most of the changes specify the correct path to
choose through the various #if/#else constructs in the locale code.

Depends on D13407.

Reviewers: mclow.lists, jroelofs, EricWF

Subscribers: jfb, tberghammer, danalbert, srhines, cfe-commits

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

llvm-svn: 252457
2015-11-09 10:21:04 +00:00
Marshall Clow 33adf230a7 Mark LWG#2224 as complete. Wording change only, no code changes required
llvm-svn: 252408
2015-11-07 17:56:51 +00:00
Marshall Clow e5f1288fa0 Implement LWG#2353: std::next is over-constrained
llvm-svn: 252407
2015-11-07 17:48:49 +00:00
Marshall Clow 8be59af1ed More of P0006R0: type traits variable aliases for C++17.
llvm-svn: 252406
2015-11-07 17:44:36 +00:00
Evgeniy Stepanov 906c872db9 Cleanup: move visibility/linkage attributes to the first declaration.
This change moves visibility attributes from out-of-class method
definitions to in-class declaration. This is needed for a switch to
attribute((internal_linkage)) (see http://reviews.llvm.org/D13925)
which can only appear on the first declaration.

This change does not touch istream/ostream/streambuf. They are
handled separately in http://reviews.llvm.org/D14409.

llvm-svn: 252385
2015-11-07 01:22:13 +00:00
Evgeniy Stepanov 65da7bc392 Allow deque to handle incomplete types.
Allow deque and deque::iterator instantiation with incomplete element
type. This is an ABI breaking change, and it is only enabled if
LIBCXX_ABI_VERSION >= 2 or LIBCXX_ABI_UNSTABLE=ON.

llvm-svn: 252350
2015-11-06 22:02:29 +00:00
Eric Fiselier 60506cbcd4 Cleanup foo.h headers and __config to work in C
llvm-svn: 252274
2015-11-06 06:30:12 +00:00
Marshall Clow 6a11b039d9 Mark LWG issue #2234. We already do this; no code change needed
llvm-svn: 252199
2015-11-05 19:57:50 +00:00
Marshall Clow 2cd0d6d625 Implement P0092R1 for C++1z
llvm-svn: 252195
2015-11-05 19:33:59 +00:00
Marshall Clow def501d1ca Make reverse() call iter_swap like the standard says, instead of calling swap directly. No real change.
llvm-svn: 251836
2015-11-02 21:34:25 +00:00
Marshall Clow 79dfd99d30 Remove undefined behavior from some tests. Same pattern as the unitialized_copy tests
llvm-svn: 251804
2015-11-02 15:29:13 +00:00
Marshall Clow 8eb1d544f8 Remove undefined behavior from some tests. Thanks to Walter Brown for the heads-up.
llvm-svn: 251802
2015-11-02 15:25:53 +00:00
Marshall Clow 6028c03976 Add 'nostdinc++' to the flags used by testit. Makes the tests run better on Mac OS X with the new depr.c headers change
llvm-svn: 251768
2015-11-01 21:14:22 +00:00
Marshall Clow 00ec0bf828 Improve the tests for 'is_literal_type'
llvm-svn: 251767
2015-11-01 21:13:10 +00:00
Marshall Clow dd0ef09954 Implement the first part of P0006R0: Adopt Type Traits Variable Templates for C++17. Significantly augment the existing tests.
llvm-svn: 251766
2015-11-01 20:24:59 +00:00
Richard Smith 25cb32091c Revert r249929 ("Split <string.h> out of <cstring>").
This change caused problems when building code like povray that:
a) uses 'using namespace std;'
b) is built on an environment where the C library provides the "wrong"
   (non-const-correct) interface for the str* functions
c) makes an unqualified call to one of those str* functions

A patch is out for review to add a facility to fix this (and to give the
correct signatures for these functions whenever possible, even when the C
library does not do so). This revert is expected to be temporary.

llvm-svn: 251665
2015-10-29 23:32:29 +00:00
Marshall Clow 131733bcf0 Implement P0004R1 'Remove Deprecated iostreams aliases'
llvm-svn: 251618
2015-10-29 05:43:30 +00:00
Marshall Clow fe44b10735 Mark two Kona papers as 'in progress'
llvm-svn: 251545
2015-10-28 19:21:40 +00:00
Matthias Braun cb668426c1 Adapt to lit change in llvm r251478-r251481
Sorry for the breakage.

llvm-svn: 251529
2015-10-28 17:20:33 +00:00
Eric Fiselier 4630f63a64 Fix test suite configuration. Sorry Marshall
llvm-svn: 251334
2015-10-26 19:08:53 +00:00
Marshall Clow 10a6e70408 Mark LWG#2495 as complete. No code changes needed
llvm-svn: 251258
2015-10-25 20:12:58 +00:00
Marshall Clow 3b72a6ef63 Fix LWG#2489: mem_fn() should be noexcept
llvm-svn: 251257
2015-10-25 20:12:16 +00:00
Marshall Clow 531c41e1b8 Add the tests for the last commit
llvm-svn: 251254
2015-10-25 19:53:29 +00:00
Marshall Clow cd5215d8c4 Fix LWG#2476: scoped_allocator_adaptor is not assignable
llvm-svn: 251253
2015-10-25 19:52:47 +00:00
Marshall Clow b631c24359 Add a test for LWG#2466: allocator_traits::max_size() default behavior is incorrect
llvm-svn: 251252
2015-10-25 19:34:04 +00:00
Marshall Clow d9977010d0 Add a test for LWG#2462: std::ios_base::failure is overspecified
llvm-svn: 251250
2015-10-25 19:20:14 +00:00
Marshall Clow 2603b0758d Fix LWG#2127: Move-construction with raw_storage_iterator.
llvm-svn: 251247
2015-10-25 18:58:07 +00:00
Marshall Clow 9be5356452 Fix LWG#2244: basic_istream::seekg
llvm-svn: 251246
2015-10-25 18:31:51 +00:00
Marshall Clow 5753adb810 Update C++ status from Kona
llvm-svn: 251220
2015-10-25 06:02:23 +00:00
Tim Northover a745ddd9a7 Set LC_COLLATE rather than LANG to override collation.
On a system with LC_COLLATE=C, this takes precedence over a non-C LANG
the test tries to impose and the test fails.

llvm-svn: 251131
2015-10-23 17:56:08 +00:00
Eric Fiselier cae21e4b4e Use proper output directory when naminging the libc++ output
llvm-svn: 251100
2015-10-23 07:04:24 +00:00
Eric Fiselier e2dd2fd7c7 Dont required CMake 3 to install a linker script
llvm-svn: 251065
2015-10-22 21:24:01 +00:00
Eric Fiselier bb90685aef Only disable linker script when LIBCXX_CXX_ABI_LIBNAME is none
llvm-svn: 251063
2015-10-22 20:54:27 +00:00
Eric Fiselier 571367e0cd Disable linker scripts when the ABI library is not specified or is none.
llvm-svn: 251062
2015-10-22 20:50:07 +00:00
Marshall Clow 1c4526757e Detect relaxed constexpr rules for gcc versions
llvm-svn: 250802
2015-10-20 07:37:11 +00:00
Benjamin Kramer 02adf40a72 Fix an unfortunate yet old typo that never got attention before r250507.
Should fix the xcode libc++ build.

llvm-svn: 250508
2015-10-16 11:26:26 +00:00
Benjamin Kramer 929df471a9 Remove a long-standing __has_include hack.
This was put in to get libc++ building without libcxxabi. We now have
macros that show that we are building against libcxxabi so use that
instead. This guards against existing but broken cxxabi.h headers on the
system.

llvm-svn: 250507
2015-10-16 11:14:30 +00:00
Eric Fiselier a15785bb5b Re-enable linker scripts after fixing bad CMake
llvm-svn: 250472
2015-10-15 23:04:54 +00:00
Eric Fiselier 7e0344a770 Quickly fix bad commit
llvm-svn: 250471
2015-10-15 22:51:50 +00:00
Eric Fiselier 1ab69fc532 [libcxx] Make libc++.so a linker script by default on most platforms.
Summary:
This patch turns on `LIBCXX_ENABLE_ABI_LINKER_SCRIPT` by default whenever `LLVM_HAVE_LINK_VERSION_SCRIPT` is ON. This turns out to be whenever:

1. WIN32 is not defined.
2 UNIX is defined.
3. APPLE is not defined.

While `LLVM_HAVE_LINK_VERSION_SCRIPT` is meant to reflect exactly what we are asking I think it's close enough.

After committing this patch Linux users will no longer have to use "-lc++abi" explicitly!




Reviewers: mclow.lists, danalbert, compnerd, jroelofs

Subscribers: emaste, rengolin, cbergstrom, cfe-commits

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

llvm-svn: 250469
2015-10-15 22:41:51 +00:00
Eric Fiselier f2be7c28fc Fix handling of -Wno-pedantic
llvm-svn: 250452
2015-10-15 20:27:15 +00:00
Eric Fiselier f0d8022ee3 Add links to libc++ code coverage and builders
llvm-svn: 250361
2015-10-15 03:27:02 +00:00
Eric Fiselier dfdf929ac9 Update issues status
llvm-svn: 250336
2015-10-14 22:26:40 +00:00
Eric Fiselier 27dec39996 Use correct CMake variable for the libname
llvm-svn: 250329
2015-10-14 21:20:28 +00:00
Eric Fiselier 9da4c8ed75 Link to new documentation from existing homepage
llvm-svn: 250325
2015-10-14 20:51:33 +00:00
Eric Fiselier 147bb89d52 Update testing guide for libc++
llvm-svn: 250323
2015-10-14 20:44:44 +00:00
Eric Fiselier 8241405ad4 [libcxx] Make it drastically simpler to link libc++.
Summary:
Currently on most platforms you have to manually link the c++ abi library used with libc++ whenever you use libc++. So your typical libc++ command like invocation might look like:

```
clang++ -stdlib=libc++ foo.cpp -lc++abi
```

Having to manually link `libc++abi.so` makes it harder for libc++ to be used generically. This patch fixes that by generating a linker script for `libc++.so` that correctly links the ABI library. On linux the linker script for libc++abi would look like:

```
# libc++.so
INPUT(libc++.so.1 -lc++abi)
```

With the linker script you can now use libc++ using only `-stdlib=libc++`. This is the technique that is used on FreeBSD in ordered to link cxxrt and I think it's the best approach to make our users lives simpler.

The CMake option used to enable this is `LIBCXX_ENABLE_ABI_LINKER_SCRIPT`. In future I would like to enable this by default on all platforms except for Darwin.

Reviewers: mclow.lists, danalbert, rsmith, jroelofs, EricWF

Subscribers: cfe-commits

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

llvm-svn: 250319
2015-10-14 19:54:03 +00:00
Eric Fiselier f71de32d7b Split out config_site logic so libc++abi can use it
llvm-svn: 250312
2015-10-14 19:00:35 +00:00
Eric Fiselier 0a534eec65 [libcxx] Use __config_site to configure the test suite features.
Summary:
This patch changes the tests to use the "__config_site" header if present instead of manually configuring for each option. This patch also removes the test flags for configuring some of these options. For example "lit -sv --param=enable_threads=OFF" no longer works. However lit will still correctly configure if  the CMake option "-DLIBCXX_ENABLE_THREADS=OFF" is given at build time. 

This patch will fix the libc++abi test configuration for `LIBCXX_ABI_VERSION` and `LIBCXX_ABI_UNSTABLE` one we teach it about 'project_obj_dir' . I would like to land this ASAP to prevent more work blockage.

Reviewers: mclow.lists, danalbert, eugenis, ed, jroelofs

Subscribers: cfe-commits

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

llvm-svn: 250308
2015-10-14 18:22:15 +00:00
Eric Fiselier d97b084bb7 Fix GCC atomic implementation in C++03
llvm-svn: 250279
2015-10-14 08:36:22 +00:00
Eric Fiselier 29ada6d178 Use __config_site when building libc++. Also cleanup ABI versioning doc
llvm-svn: 250261
2015-10-14 00:22:05 +00:00
Eric Fiselier f4bfd7c6ff Workaround -pedantic flag added by LLVM
llvm-svn: 250256
2015-10-13 23:56:33 +00:00
Evgeniy Stepanov a66a7b30ce ABI versioning macros for libc++.
C++ macros and CMake options that specify the default ABI version of
the library, and can be overridden to pick up new ABI-changing
features.

llvm-svn: 250254
2015-10-13 23:48:28 +00:00
Richard Smith f157e47fb8 Fix use of libc++ <foo.h> headers from within an 'extern "C"' context in C++98.
Previously, this resulted in us declaring a template for static_assert emulation within the 'extern "C"' context, which is ill-formed.

llvm-svn: 250247
2015-10-13 23:12:22 +00:00
Eric Fiselier b34aa900fc Fix whitespace in doc
llvm-svn: 250238
2015-10-13 22:22:42 +00:00
Richard Smith d3a7bfcde5 Remove __config module to avoid #include cycle when libc headers include libc++'s <foo.h> headers.
llvm-svn: 250236
2015-10-13 22:13:33 +00:00
Eric Fiselier f9f796e79b [libcxx] Capture configuration information when installing the libc++ headers
Summary:
Hi all,

This patch is a successor to D11963. However it has changed dramatically and I felt it would be best to start a new review thread.

Please read the design documentation added in this patch for a description of how it works.

Reviewers: mclow.lists, danalbert, jroelofs, EricWF

Subscribers: vkalintiris, rnk, ed, espositofulvio, asl, eugenis, cfe-commits

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

llvm-svn: 250235
2015-10-13 22:12:02 +00:00
Marshall Clow 438bdf639b Mark 2447 and 2466 as completed.
llvm-svn: 250061
2015-10-12 16:25:21 +00:00
Chris Bieneman 7c6a3b4c47 [Darwin] Reworking r250003 to use lit.util.capture instead of subprocess.
llvm-svn: 250007
2015-10-12 02:54:30 +00:00
Chris Bieneman e99983b2df [Darwin] Need to add -isysroot on OS X otherwise the tests will fail if you don't have the command line tools package installed.
This mirrors how other LLVM suites are configured for running on OS X.

llvm-svn: 250003
2015-10-12 00:49:56 +00:00
Eric Fiselier 6fb770adb5 Turn off -pedantic by default when building due to #include_next. :-(
llvm-svn: 249939
2015-10-10 03:34:52 +00:00
Eric Fiselier d2a4553d52 Revert r249931 - Remove same_decls.pass.cpp because it fails on OS X and in C++03 mode.
llvm-svn: 249938
2015-10-10 03:31:23 +00:00
Eric Fiselier 448dd41588 Get some of wchar_h.pass.cpp working on apple.
llvm-svn: 249936
2015-10-10 02:54:41 +00:00
Richard Smith 0ecae015ff Unrevert r249889, and XFAIL the test for Darwin, where the libc apparently doesn't provide a correct overload set for some functions.
llvm-svn: 249932
2015-10-10 01:39:51 +00:00
Richard Smith 3cfee3d010 Add a test that we declare the right set of C library function signatures in ::
and std::, and that the names in :: and std:: are declaring the same entity.

llvm-svn: 249931
2015-10-10 01:33:17 +00:00
Richard Smith da231b4a3c Split <string.h> out of <cstring>.
Also fix the overload set for the five functions whose signatures change in the
case where we can fix it. This is already covered by existing tests for the
affected systems.

llvm-svn: 249929
2015-10-10 01:25:31 +00:00
Manman Ren 79d8bc4c88 Revert r249889 due to bot failure.
llvm-svn: 249926
2015-10-10 01:03:55 +00:00
Richard Smith a6e8ebb0d9 Split <wctype.h> out of <cwctype>.
llvm-svn: 249890
2015-10-09 19:57:37 +00:00
Richard Smith 897758d6ba Split <wchar.h> out of <cwchar>.
llvm-svn: 249889
2015-10-09 19:56:37 +00:00
Richard Smith a51c8eee6e Split <stdlib.h> out of <cstdlib>.
llvm-svn: 249800
2015-10-09 01:41:45 +00:00
Richard Smith d32827408e Split <stdio.h> out of <cstdio>.
As with <stddef.h>, skip our custom header if __need_FILE or __need___FILE is defined.

llvm-svn: 249798
2015-10-09 01:29:09 +00:00
Richard Smith 2999ea0f04 PR25118: move system_header pragma before uses of include_next to avoid extension warnings for people finding libc++ headers via -I paths.
llvm-svn: 249788
2015-10-09 00:26:50 +00:00
Richard Smith 55a7a2481b Fix test failure in C++98 mode due to imperfect static_assert emulation.
llvm-svn: 249780
2015-10-08 23:44:26 +00:00
Richard Smith d6cffc4fe0 Split <stddef.h> out of <cstddef>.
There are a bunch of macros (__need_size_t etc) that request just one piece of
<stddef.h>; if any one of these is defined, we just directly include the
underlying header.

Note that <stddef.h> provides a ::nullptr_t. We don't want that available to
includers of <cstddef>, so instead of following the usual pattern where <cfoo>
includes <foo.h> then pulls things from :: into std:: with using-declarations,
we implement <stddef.h> and <cstddef> separately; both include <__nullptr> for
the definition of std::nullptr_t.

llvm-svn: 249761
2015-10-08 22:25:27 +00:00
Richard Smith 239ab3c03f Fix incorrect file header. This is <cfenv> not <cctype>.
llvm-svn: 249749
2015-10-08 21:17:21 +00:00
Richard Smith 38a2a28ff7 Split <setjmp.h> out of <csetjmp>.
llvm-svn: 249743
2015-10-08 20:41:26 +00:00
Richard Smith 524956bb3d Split <math.h> out of <cmath>.
llvm-svn: 249742
2015-10-08 20:40:34 +00:00
Richard Smith 37df7a05c2 Split <inttypes.h> out of <cinttypes>.
llvm-svn: 249741
2015-10-08 20:38:53 +00:00
Richard Smith 33700e640c Split <float.h> out of <cfloat>.
llvm-svn: 249740
2015-10-08 20:37:44 +00:00
Richard Smith 3cb38811ea Split <errno.h> out of <cerrno>.
llvm-svn: 249739
2015-10-08 20:37:11 +00:00
Richard Smith f80c1b7331 Split <ctype.h> out of <cctype>.
llvm-svn: 249738
2015-10-08 20:36:30 +00:00
Richard Smith c467d9b492 Factor definition of std::nullptr_t out of <cstddef> into a header that can also be used by <stddef.h>.
llvm-svn: 249737
2015-10-08 20:34:11 +00:00
Marshall Clow 1f3f2d698a Mark 2244 as 'Patch Ready', 2477 and 2487 as 'Complete'
llvm-svn: 249595
2015-10-07 19:45:14 +00:00
Marshall Clow 2a7b00e166 While researching LWG#2244, I noticed we weren't testing that eofbit was being cleared. Now we are
llvm-svn: 249593
2015-10-07 19:41:24 +00:00
Richard Smith 1607bb38b6 Remove unnecessary inline functions capturing the contents of C library macros.
The C standard requires that these be provided as functions even if they're
also provided as macros, and a strict reading of the C++ standard library rules
suggests that (for instance) &::isdigit == &::std::isdigit, so these wrappers
are technically non-conforming.

llvm-svn: 249475
2015-10-06 22:03:22 +00:00
Marshall Clow 28ac01bfc8 Updated issue 2476
llvm-svn: 249461
2015-10-06 20:35:15 +00:00
Marshall Clow 05e9cb5636 Our test allocators support move/copy construction; they should support move/copy assignment as well
llvm-svn: 249458
2015-10-06 20:30:56 +00:00
Eric Fiselier 5499f4a35e Add comments for LWG issues 2219 and 2367
llvm-svn: 249372
2015-10-06 04:12:30 +00:00
Marshall Clow d77e802f07 Mark 2259 and 2473 as complete. Add some more notes
llvm-svn: 249363
2015-10-05 23:27:10 +00:00
Marshall Clow 297d1c58b2 Mark 2380 and 2384 as complete; no changes needed
llvm-svn: 249354
2015-10-05 21:11:20 +00:00
Marshall Clow 0dbf123f7b Patch for 2466 is ready
llvm-svn: 249352
2015-10-05 21:08:49 +00:00
Marshall Clow e652e4dae1 Fixed a possible overflow in a test of allocator::max_size().
llvm-svn: 249349
2015-10-05 20:50:25 +00:00
Marshall Clow 5fb7d5a9e3 Mark a couple more issues 'ready'
llvm-svn: 249348
2015-10-05 20:35:30 +00:00
Marshall Clow 3f11baf4c7 Mark 2072 as complete; we already do this
llvm-svn: 249347
2015-10-05 20:21:54 +00:00
Marshall Clow 1c2f0c439f Patch ready for 2127
llvm-svn: 249345
2015-10-05 20:16:30 +00:00
Eric Fiselier 9dbb5586b5 [libcxx] Reexport std::bad_array_length symbols from libc++abi on OS X.
Summary:
On OS X libc++ needs to reexport libc++abi's symbols in order for them to be provided. We explicitly list the symbols to reexport it libcxx/lib/libc++abi2.exp. This patch adds the symbols required by std::bad_array_length which have been missing for some time.

However there is a problem. std::bad_array_length was add to libc++abi in September of 2013 by commit r190479, about a year after everything else. Therefore I think older OS X version  have libc++abi versions without std::bad_array_length. On those systems
libc++ won't build with this change because we will try and export undefined symbols.

The workaround I would write to support older systems depends on the amount of people who would need it.   If only a small number of developers are affected it might be sufficient to provide a CMake switch like `LIBCPP_LIBCPPABI_HAS_BAD_ARRAY_LENGTH` which is
ON by default and can be disabled by those who need it. Otherwise I think we should try to automatically detect if the symbols are present in `/usr/lib/libc++abi.dylib` and configure accordingly. I would prefer the first solution because writing CMake sucks.




Reviewers: mclow.lists, aprantl

Subscribers: aprantl, cfe-commits

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

llvm-svn: 249339
2015-10-05 19:28:48 +00:00
Marshall Clow e7e19988a8 Add comments about the issues
llvm-svn: 249334
2015-10-05 18:48:10 +00:00
Marshall Clow 1d6be76987 Private page for status of Kona issues and papers. Will be deleted after the Kona meeting. Not to be linked to from other pages.
llvm-svn: 249333
2015-10-05 18:40:13 +00:00
Marshall Clow 8428a9d5b6 Implement LWG#2063, and update the issues links to point to the github generated pages
llvm-svn: 249325
2015-10-05 16:17:34 +00:00
Eric Fiselier ca95c286f0 [libcxx] Use newest supported language dialect when running the test suite.
Summary:
Currently the test suite defaults to C++11 mode if no standard version is supplied to LIT using `--param=std=c++XX`.  This patch changes that behavior so that the newest possible dialect is selected instead.

I have already patched the C++11 bot to explicitly specify `--param=std=c++11`. I'm just putting this up for review to see if anybody objects to this idea.

Reviewers: mclow.lists, jroelofs, danalbert

Subscribers: cfe-commits

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

llvm-svn: 249226
2015-10-03 02:32:23 +00:00
Eric Fiselier 2d6c0e79f7 [libcxx] Attempt to fix __throw_future_error in C++03
Summary:
Hi Marshall,

Could you please test this patch and see if you run into the same linker errors we talked about?
I can't reproduce on linux or OS X.

Hopefully you can't find any problems and we can fix the C++03 bot.

Reviewers: mclow.lists

Subscribers: cfe-commits

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

llvm-svn: 249192
2015-10-02 21:25:15 +00:00
Eric Fiselier 7362982e62 Attempt to prevent flaky thread.mutex tests by once again increasing timing tolerances
llvm-svn: 248993
2015-10-01 08:34:37 +00:00
Eric Fiselier d866bdd692 Manually suppress -Wnonnull when it occurs in an unevaluated context
llvm-svn: 248989
2015-10-01 07:41:07 +00:00
Eric Fiselier 5c736fe9ab Fix initialzation order in dynarray
llvm-svn: 248988
2015-10-01 07:29:38 +00:00
Eric Fiselier b4e2e7a292 Suppress array initialization warnings in std::experimental::apply tests
llvm-svn: 248987
2015-10-01 07:05:38 +00:00
Eric Fiselier f74bb3b8b0 Dont link -lrt in the testsuite on linux unless using sanitizers.
llvm-svn: 248986
2015-10-01 06:15:26 +00:00
Marshall Clow 286a74e93d Fix Typo in GCC no RTTI detection. Fixes PR#24901. Thanks to Bernhard Rosenkraenzer for the report and the patch.
llvm-svn: 248329
2015-09-22 21:58:30 +00:00
Dimitry Andric 66aa3a7f9e Add placeholder __libcpp_relaxed_store() for when atomic builtins are not available.
Summary:
In rL241532, atomic_support.h was added, which provides handling of
atomic operations for libc++.  When atomic builtins are not available,
it emits a warning about being unsupported, but it still provides a
number of stubs for the required functions.

However, it misses a stub for `__libcpp_relaxed_store()`.  Add it, by
using the same implementation as for `__libcpp_atomic_store()`.

(Note that I encountered this on arm-freebsd, which still defaults to
armv4, and does not have the runtime libcalls to support atomic
builtins.  For now, I have simply disabled using them.)

Reviewers: mclow.lists, EricWF

Subscribers: theraven, cfe-commits, jroelofs, majnemer, aemerson

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

llvm-svn: 248313
2015-09-22 18:55:37 +00:00
Eric Fiselier 56465abe13 Remove possible trailing padding from aligned_storage. Patch from Yiran Wang
llvm-svn: 248309
2015-09-22 18:37:03 +00:00
Marshall Clow e8fe34d4d1 The test I cnecked in to check the fix for PR#24890 failed (as expected) w/o the fix, but for the wrong reason. Now it fails for the right reason.
llvm-svn: 248307
2015-09-22 18:09:13 +00:00
Marshall Clow 835e77e29e Check in the test for PR#24890 that I forgot in previous commit
llvm-svn: 248305
2015-09-22 17:57:41 +00:00
Marshall Clow 0510a5adc8 Change pair::swap(pair&) to call ADL swap instead of iter_swap; this fixes an obscure bug having to do with overloaded operator&. Fixes PR#24890
llvm-svn: 248304
2015-09-22 17:50:11 +00:00
Eric Fiselier 927a11e380 Fix <atomic> with -pedantic-errors
llvm-svn: 248240
2015-09-22 03:15:35 +00:00
Dan Albert 5e61cfdb9e Add endianness configuration block for GCC.
Previously GCC using libc++ would just leak endian.h for every
include.

llvm-svn: 247827
2015-09-16 18:10:47 +00:00
Marshall Clow 20ade932fb Suppress some warnings in the tests that snuck in. That 'tmpnam' is deprecated doesn't change the fact that we have to test it.
llvm-svn: 247704
2015-09-15 17:12:49 +00:00
Marshall Clow f979baabbb Change initialization of mbstate_t objects in tests from '= {0}' to '= {}', which does the same thing, w/o having clang and gcc warn with -Wall.
llvm-svn: 247695
2015-09-15 14:46:03 +00:00
Marshall Clow f44bd93bec Implementation of Boyer-Moore and Boyer-Moore-Horspool searchers for the LFTS.
llvm-svn: 247036
2015-09-08 17:59:09 +00:00
Eric Fiselier 21dfbfb426 make common_type SFINAE-friendly and support void. Patch from Agustin Berge.
This patch also fixes PR22135. (https://llvm.org/bugs/show_bug.cgi?id=22135)
See the review for more information: http://reviews.llvm.org/D6964

llvm-svn: 246977
2015-09-08 00:13:57 +00:00
Eric Fiselier 27c1e5c2a9 Cleanup BuildingLibcxx.rst and remove TODO
llvm-svn: 246952
2015-09-06 23:31:16 +00:00
Eric Fiselier 67ffd0e9af Fix another bad link in the new docs
llvm-svn: 246951
2015-09-06 23:22:02 +00:00
Eric Fiselier 988686349f Try to fix links for libcxx.llvm.org/docs again.
llvm-svn: 246950
2015-09-06 23:09:54 +00:00
Eric Fiselier a416e57b89 Try and fix links again. Seems to be a sphinx version issue.
llvm-svn: 246915
2015-09-05 07:20:53 +00:00
Eric Fiselier e4077cb1ed Try and fix broken bugzilla link
llvm-svn: 246914
2015-09-05 06:57:29 +00:00
Eric Fiselier 3034b066c0 Cleanup new documentation index and transfer more information from www/index.html
llvm-svn: 246913
2015-09-05 06:50:03 +00:00
Tanya Lattner d01ea56015 Remove test commit.
llvm-svn: 246912
2015-09-05 05:38:50 +00:00
Tanya Lattner feb91925a4 Test temporary commit.
llvm-svn: 246911
2015-09-05 05:34:27 +00:00
Eric Fiselier 11027f6c5a Test commit for builder
llvm-svn: 246910
2015-09-05 05:29:23 +00:00
Eric Fiselier 5fb53fce5f Add temporary Makefile.sphinx build file to get libcxx.llvm.org/docs going
llvm-svn: 246909
2015-09-05 05:12:04 +00:00
Eric Fiselier e6c2ae3294 Try building docs again.
llvm-svn: 246906
2015-09-05 01:32:48 +00:00
Eric Fiselier c681dc26db Test commit for sphinx docs try2
llvm-svn: 246895
2015-09-04 23:19:11 +00:00
Eric Fiselier cc44cbbde4 Test commit to see if libcxx.llvm.org/docs builds
llvm-svn: 246893
2015-09-04 22:57:00 +00:00
Marshall Clow a0daa7394e Make a helper routine __throw_future_error, and encapsulate the #ifdef _LIBCPP_NO_EXCEPTIONS there, instead of duplicating it throughout the code. No functionality change
llvm-svn: 246772
2015-09-03 15:11:32 +00:00
Marshall Clow cd7c3e671b Remove unused code. NFC
llvm-svn: 246445
2015-08-31 14:43:41 +00:00
Eric Fiselier 888d91a9e4 Move __lazy_* metafunctions to type traits and add tests
llvm-svn: 246408
2015-08-31 03:50:31 +00:00
Eric Fiselier d49455ef93 Suppress clang warnings in some tests
llvm-svn: 246399
2015-08-30 22:04:20 +00:00
Eric Fiselier de1495b9b6 Remove task to get C++03 tests passing from TODO.txt
llvm-svn: 246392
2015-08-30 17:58:50 +00:00
Eric Fiselier e57e3aebe3 Fix most GCC warnings during build. Only -Wattribute left.
llvm-svn: 246280
2015-08-28 07:02:42 +00:00
Eric Fiselier 1e051aab0c Finally get the test suite passing in C++03!!
After months of work there are only 4 tests still failing in C++03.
This patch fixes those tests.

All of the libc++ builders should be green.

llvm-svn: 246275
2015-08-28 05:46:17 +00:00
Eric Fiselier 8ec5189656 Remove empty file that arcanist created
llvm-svn: 246273
2015-08-28 05:18:13 +00:00
Eric Fiselier d48306e704 [libcxx] Constrain unique_ptr::operator=(unique_ptr<Tp, Dp>) in C++03 mode
Summary:
This patch properly constrains the converting assignment operator in C++03. It also fixes a bug where std::forward was given the wrong type.
The following two tests begin passing in C++03:

* `unique_ptr.single.asgn/move_convert.pass.cpp`
* `unique_ptr.single.asgn/move_convert13.fail.cpp`

Reviewers: mclow.lists

Subscribers: cfe-commits

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

llvm-svn: 246272
2015-08-28 05:07:06 +00:00
Eric Fiselier cb38f75e29 [libcxx] Mark most test/std/future tests as UNSUPPORTED in C++03
Summary:
This patch marks *most* tests for `std::promise`, `std::future` and `std::shared_future` as unsupported in C++03. These tests fail in C++03 mode because they attempt to copy a `std::future` even though it is a `MoveOnly` type. AFAIK the missing move-semantics in `std::future` is the only reason these tests fail but without move semantics these classes are useless. For example even though `std::promise::set_value` and `std::promise::set_exception(...)` work in C++03 `std::promise` is still useless because we cannot call `std::promise::get_future(...)`.

It might be possible to hack `std::move(...)` like we do for `std::unique_ptr` to make the move semantics work but I don't think it is worth the effort. Instead I think we should leave the `<future>` header as-is and mark the failing tests as `UNSUPPORTED`. I don't believe there are any users of `std::future` or `std::promise` in C++03 because they are so unusable. Therefore I am not concerned about losing test coverage and possibly breaking users. However because there are still parts of `<future>` that work in C++03 it would be wrong to `#ifdef` out the entire header.

@mclow.lists Should we take further steps to prevent the use of `std::promise`, `std::future` and `std::shared_future` in C++03?


Note: This patch also cleans up the tests and converts them to use `support/test_allocator.h` instead of a duplicate class in `test/std/futures/test_allocator.h`.

Reviewers: mclow.lists

Subscribers: vsk, mclow.lists, cfe-commits

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

llvm-svn: 246271
2015-08-28 05:06:04 +00:00
Eric Fiselier fc8e8c0360 Fix bug in test_allocator<void> that used the wrong value to represent object state
llvm-svn: 246270
2015-08-28 05:00:25 +00:00
Eric Fiselier 8465ea4440 [libcxx] Optimize away unneeded length calculation in basic_string::compare(const char*)
Summary:
This patch optimizes basic_string::compare to use strcmp when the default char_traits has been given.
See PR19900 for more information. https://llvm.org/bugs/show_bug.cgi?id=19900

Reviewers: mclow.lists

Subscribers: bkramer, cfe-commits

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

llvm-svn: 246266
2015-08-28 03:02:37 +00:00
Jonathan Roelofs 643e0ab8df Do not include pthread.h and sched.h when threads are disabled
Patch by Philippe Daouadi!

http://reviews.llvm.org/D9639

llvm-svn: 246168
2015-08-27 17:47:34 +00:00
Marshall Clow 3e61f238c6 Remove a switch statement, and replace with a bunch of ifs to silence a warning about 'all the enumeration values covered'. No functional change.
llvm-svn: 246150
2015-08-27 14:37:22 +00:00
Eric Fiselier d77135f828 [libcxx] Remove installation rules on Darwin when it would overwrite the system installation.
Summary:
On Mac OS X overwriting `/usr/lib/libc++.dylib` can cause your computer to fail to boot. This patch tries to make it harder to do that accidentally. 

If `CMAKE_SYSTEM_NAME` is `Darwin` and `CMAKE_INSTALL_PREFIX` is `/usr` don't generate installation rules unless the user explicitly provides `LIBCXX_OVERRIDE_DARWIN_INSTALL=ON`. Note that `CMAKE_INSTALL_PREFIX` is always absolute so we don't need to worry about things like `/usr/../usr`.

Reviewers: mclow.lists, beanz, jroelofs

Subscribers: cfe-commits

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

llvm-svn: 246070
2015-08-26 20:18:21 +00:00
Eric Fiselier 4b30e569be [libcxx] Add special warning flag detection logic to compiler.py
Summary: Detecting `-Wno-<warning>` flags can be tricky with GCC (See https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html). This patch adds a special `addWarningFlagIfSupported(<flag>)` method to the test compiler object that can be used to add warning flags. The goal of this patch is to help get the test suite running with more warnings.

Reviewers: danalbert, jroelofs

Subscribers: cfe-commits

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

llvm-svn: 246069
2015-08-26 20:17:33 +00:00
Eric Fiselier 70192a9efb [libcxx] Rewrite C++03 __invoke.
Summary:
This patch rewrites the C++03 `__invoke` and related meta-programming. There are a number of major changes.

`__invoke` in C++03 now has a fallback overload for when the invoke expression is ill-formed (similar to C++11). This means that the `__invoke_return` traits will return `__nat` when `__invoke(...)` is ill formed. This would previously cause a compile error.

Bullets 1-4 of `__invoke` have been rewritten. In the old version `__invoke` had 32 overloads for bullets 1 and 2,
one for each possible cv-qualified function signature with arities 0-3. 64 overloads would be needed to support member functions
with varargs. Currently these overloads were fundamentally broken. An example overload looked like:
```
template <class Rp, class Tp, class T1, class A0>
Rp __invoke(Rp (Tp::*pm)(A0) const, T1&, A0&)
```
Because `A0` appeared in two different deducible contexts it would have to deduce to be an exact match or the overload
would be rejected. This is made even worse because `A0` appears without a reference qualifier in the member function signature
and with a reference qualifier as an `__invoke` parameter. This means that only member functions that took all
of their arguments by value could be matched.

One possible fix would be to make the second occurrence of `A0` appear in a non-deducible context. This way
any type convertible to `A0` could be passed as the first parameter. The benefit of this approach is that the
signature of the member function enforces the arity and types taken by the `__invoke` signature it generates. However
nothing in the `INVOKE` specification requires this behavior.

My solution is to use a `__invoke_enable_if<PM_Type, Tp>`  metafunction to selectively enable the `__invoke` overloads for bullets 1, 2, 3 and 4.  It uses `__member_function_traits` to inspect and extract the return type and class type of the pointer to member. Using `__member_function_traits` to inspect `PM_Type` also allows us to reduce the number of `__invoke` overloads from 32 to 8 and add
varargs support at the same time.

Because `__invoke_enable_if` knows the exact return type of `__invoke` for bullets 1-4 we no longer need to use `decltype(__invoke(...))` to
compute the return type in the `__invoke_return*` traits. This will reduce the problems caused by `#define decltype(X) __typeof__(X)` in C++03.

Tests for this change have already been committed. All tests in `test/std/utilities/function.objects` now pass in C++03, previously there were 20 failures.

Reviewers: K-ballo, howard.hinnant, mclow.lists

Subscribers: cfe-commits

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

llvm-svn: 246068
2015-08-26 20:15:02 +00:00
Eric Fiselier b610a45c7b Refactor flaky shared_mutex tests
llvm-svn: 246055
2015-08-26 19:04:40 +00:00
Eric Fiselier 44d9307293 Remove XFAIL in test. The bug causing it has been fixed.
llvm-svn: 246022
2015-08-26 07:03:43 +00:00
Eric Fiselier bc385daaf7 Mark test as XFAIL with MSAN until D12311 gets committed
llvm-svn: 245922
2015-08-25 04:35:55 +00:00
Eric Fiselier fb65a3a657 Refactor and fix more flaky shared_mutex tests
llvm-svn: 245918
2015-08-25 01:28:52 +00:00
Eric Fiselier b76b5b255d Move test/std/utilities/date.time to proper stable name utilities/time/date.time
llvm-svn: 245877
2015-08-24 21:27:25 +00:00
Jonathan Roelofs 91b3a5e7c5 Misc drive-by cleanups. NFC
http://reviews.llvm.org/D12294

llvm-svn: 245876
2015-08-24 21:20:07 +00:00
Eric Fiselier e84af10255 Add release goals to TODO.txt
llvm-svn: 245864
2015-08-24 19:33:40 +00:00
Marshall Clow 550dfe79ca Fix a crasher found by libFuzzer
llvm-svn: 245849
2015-08-24 15:57:09 +00:00
Eric Fiselier 1c81340797 Recommit rL245802: Cleanup fancy pointer rebinding in list using __rebind_pointer.
Currently we need an #ifdef branch every time we use pointer traits to rebind a pointer because
it is done differently in C++11 and C++03. This patch introduces the __rebind_pointer utility to
clean this up.

Also add a test that list and it's iterators can be instantiated with incomplete element types.

llvm-svn: 245806
2015-08-23 02:56:05 +00:00
Eric Fiselier 236f405b1d Revert r245802. It violates the incomplete type requirements.
llvm-svn: 245805
2015-08-23 02:39:20 +00:00
Eric Fiselier 24e817d223 Cleanup fancy pointer rebinding in list using __rebind_pointer.
Currently we need an #ifdef branch every time we use pointer traits to rebind a pointer because
it is done differently in C++11 and C++03. This patch introduces the __rebind_pointer utility to
clean this up. 

llvm-svn: 245802
2015-08-23 02:34:18 +00:00
Eric Fiselier 4c0a2a989b Refactor shared_timed_mutex tests.
First I removed all of the uses of _LIBCPP_STD_VER and added LIT UNSUPPORTED tags to prevent the tests from being run in older standard dialects.
Second I increased the time tolerances used in some tests when testing with Thread Sanitizer because thread sanitizer make these tests take longer.

llvm-svn: 245793
2015-08-22 21:24:01 +00:00
Eric Fiselier 42e4a0e47f Fix default value for LLVM_INCLUDE_DOCS in out of tree build.
llvm-svn: 245790
2015-08-22 20:26:42 +00:00
Eric Fiselier b17bb06914 [libcxx] Add new Sphinx documentation
Summary:
This patch adds Sphinx based documentation to libc++. The goal is to make it easier to write documentation for libc++ since writing new documentation in HTML is cumbersome. This patch rewrites the main page for libc++ along with the instructions for using, building and testing libc++. 

The built documentation can be found and reviewed here: http://efcs.ca/libcxx-docs

In order to build the sphinx documentation you need to specify the cmake options `-DLLVM_ENABLE_SPHINX=ON -DLIBCXX_INCLUDE_DOCS=ON`. This will add the makefile rule `docs-libcxx-html`.

Reviewers: chandlerc, mclow.lists, danalbert, jroelofs

Subscribers: silvas, cfe-commits

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

llvm-svn: 245788
2015-08-22 19:40:49 +00:00
Eric Fiselier 30ec17981a Remove completed items from TODO.TXT
llvm-svn: 245601
2015-08-20 19:22:35 +00:00
Eric Fiselier 10fe42099c Fix a typo: overidden -> overridden - Patch from Kai Zhao
llvm-svn: 245539
2015-08-20 05:23:16 +00:00
Eric Fiselier 60ab5bcaab Fix a typo: abreviated -> abbreviated - Patch from Kai Zhao
llvm-svn: 245538
2015-08-20 05:20:29 +00:00
Eric Fiselier 4f42dcd59b Cleanup unique_ptr failure tests and convert them to Clang verify
llvm-svn: 245529
2015-08-20 01:08:03 +00:00
Eric Fiselier 25dd3a699c Fix one last dynarray test
llvm-svn: 245528
2015-08-20 00:20:05 +00:00
Eric Fiselier 7defcae5f7 Fix more uses of uninitialized values in dynarray
llvm-svn: 245525
2015-08-20 00:10:22 +00:00
Eric Fiselier 3fc456d826 Cleanup failing dynarray tests
llvm-svn: 245522
2015-08-19 23:33:18 +00:00
Eric Fiselier 10ac1f98fa Add files that got missed in r245512.
llvm-svn: 245513
2015-08-19 22:35:56 +00:00
Eric Fiselier 2228a8a3f2 More unique_ptr test cleanup. Fixes in <memory> to come later.
llvm-svn: 245512
2015-08-19 22:35:07 +00:00
Eric Fiselier 7cb813ffc4 [libcxx] Add "install-libcxx" target.
Summary: Currently you can't install libc++ from within the LLVM tree without installing all of LLVM. This patch adds an install rule for libc++.

Reviewers: mclow.lists, danalbert, jroelofs, EricWF

Subscribers: cfe-commits

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

llvm-svn: 245470
2015-08-19 17:41:53 +00:00
Eric Fiselier 92499e455e Remove test_atomic.h header
Because <atomic> can now be used in C++03 there is no need for the test_atomic.h header.
This commit removes the header and converts all usages to use <atomic> instead.

llvm-svn: 245468
2015-08-19 17:37:34 +00:00
Alexey Samsonov 0fc7892b77 Replace __asan_set_error_exit_code() with __sanitizer_set_death_callback()
Summary: We are going to remove the former soon.

Reviewers: EricWF

Subscribers: cfe-commits

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

llvm-svn: 245467
2015-08-19 17:28:01 +00:00
Eric Fiselier 749adeba3d [libcxx] Allow use of <atomic> in C++03. Try 3.
Summary:
After putting this question up on cfe-dev I have decided that it would be best to allow the use of `<atomic>` in C++03. Although static initialization is a concern the syntax required to get it is C++11 only. Meaning that C++11 constant static initialization cannot silently break in C++03, it will always cause a syntax error. Furthermore `ATOMIC_VAR_INIT` and `ATOMIC_FLAG_INIT` remain defined in C++03 even though they cannot be used because C++03 usages will cause better error messages.

The main change in this patch is to replace `__has_feature(cxx_atomic)`, which only returns true when C++ >= 11, to `__has_extension(c_atomic)` which returns true whenever clang supports the required atomic builtins.


This patch adds the following macros:
* `_LIBCPP_HAS_C_ATOMIC_IMP`      - Defined on clang versions which provide the C `_Atomic` keyword.
* `_LIBCPP_HAS_GCC_ATOMIC_IMP` - Defined on GCC > 4.7. We must use the fallback atomic implementation.
* `_LIBCPP_HAS_NO_ATOMIC_HEADER` - Defined when it is not safe to include `<atomic>`.

`_LIBCPP_HAS_C_ATOMIC_IMP` and `_LIBCPP_HAS_GCC_ATOMIC_IMP` are mutually exclusive, only one should be defined. If neither is defined then `<atomic>` is not implemented and including `<atomic>` will issue an error.

Reviewers: chandlerc, jroelofs, mclow.lists

Subscribers: cfe-commits

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

llvm-svn: 245463
2015-08-19 17:21:46 +00:00
Dimitry Andric 251c629117 Fix warnings about pessimizing return moves for C++11 and higher
Summary:
Throughout the libc++ headers, there are a few instances where
_VSTD::move() is used to return a local variable.  Howard commented in
r189039 that these were there "for non-obvious reasons such as to help
things limp along in C++03 language mode".

However, when compiling these headers with warnings on, and in C++11 or
higher mode (like we do in FreeBSD), they cause the following complaints
about pessimizing moves:

    In file included from tests.cpp:26:
    In file included from tests.hpp:29:
    /usr/include/c++/v1/map:1368:12: error: moving a local object in a return statement prevents copy elision [-Werror,-Wpessimizing-move]
        return _VSTD::move(__h);  // explicitly moved for C++03
               ^
    /usr/include/c++/v1/__config:368:15: note: expanded from macro '_VSTD'
    #define _VSTD std::_LIBCPP_NAMESPACE
                  ^

Attempt to fix this by adding a _LIBCPP_EXPLICIT_MOVE() macro to
__config, which gets defined to _VSTD::move for pre-C++11, and to
nothing for C++11 and later.

I am not completely satisfied with the macro name (I also considered
_LIBCPP_COMPAT_MOVE and some other variants), so suggestions are
welcome. :)

Reviewers: mclow.lists, howard.hinnant, EricWF

Subscribers: arthur.j.odwyer, cfe-commits

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

llvm-svn: 245421
2015-08-19 06:43:33 +00:00
Eric Fiselier 9c039962ca Use TestAtomic instead of std::atomic so the test can run in C++03
llvm-svn: 245415
2015-08-19 05:00:36 +00:00
Eric Fiselier 1df02ee1f9 Mark std::packaged_task tests as unsupported in C++03.
std::packaged_task requires variadic templates and is #ifdef out in C++03.
This patch silences the tests in C++03. This patch also rewrites the .fail.cpp tests so that they use clang verify.

llvm-svn: 245413
2015-08-19 04:10:15 +00:00
Eric Fiselier 21851d2b45 Remove commented out TODOs. They defined unneeded methods.
llvm-svn: 245411
2015-08-19 03:48:08 +00:00
Eric Fiselier 9a5e62bf75 Fix use of static_assert macro with nested commas
llvm-svn: 245410
2015-08-19 03:38:41 +00:00
Eric Fiselier 10967a6ea6 [libcxx] Add Atomic test helper and fix TSAN failures.
Summary:
This patch attempts to fix the last 3 TSAN failures on the libc++ bot (http://lab.llvm.org:8011/builders/libcxx-libcxxabi-x86_64-linux-ubuntu-tsan/builds/143). This patch also adds a `Atomic` test type that can be used where `<atomic>` cannot.

`wait.exception.pass.cpp` and `wait_for.exception.pass.cpp` were failing because the test replaced `std::terminate` with `std::exit`. `std::exit` would asynchronously run the TLS and static destructors and this would cause a race condition. See PR22606 and D8802 for more details. 

This is fixed by using `_Exit` to prevent cleanup.

`notify_all_at_thread_exit.pass.cpp` exercises the same race condition but for different reasons. I fixed this test by manually joining the thread before beginning program termination.

Reviewers: EricWF, mclow.lists

Subscribers: cfe-commits

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

llvm-svn: 245389
2015-08-18 23:29:59 +00:00
Eric Fiselier e8fd164569 Move atomic_support.h and config_elast.h into src/include
llvm-svn: 245354
2015-08-18 21:08:54 +00:00
Marshall Clow 29f11b381f Broke C++03 compatibility in 245330. Fix that.
llvm-svn: 245336
2015-08-18 19:51:37 +00:00
Eric Fiselier 0d28f78401 [libcxx] Fix PR23589: std::function doesn't recognize null pointer to varargs function.
Summary:
This patch fixes __not_null's detection of nullptr by breaking it down into 4 cases.

1. `__not_null(Tp const&)`: Default case. Tp is not null.
2. `__not_null(Tp* __ptr);` Case for pointers to functions.
3. `__not_null(_Ret _Class::* __ptr);` Case for pointers to members.
4. `__not_null(function<Tp> const&);`: Cases for other std::functions.

Reviewers: mclow.lists

Subscribers: cfe-commits

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

llvm-svn: 245335
2015-08-18 19:41:51 +00:00
Eric Fiselier 4504cf2c8d [libc++] Fix PR22606 - Leak pthread_key with static storage duration to ensure all of thread-local destructors are called.
Summary:
See https://llvm.org/bugs/show_bug.cgi?id=22606 for more discussion.

Most of the changes in this patch are file reorganization to help ensure assumptions about how __thread_specific_pointer is used hold. The assumptions are:

* `__thread_specific_ptr<Tp>` is only created with a `__thread_struct` pointer.
* `__thread_specific_ptr<Tp>` can only be constructed inside the `__thread_local_data()` function.

I'll remove the comments before committing. They are there for clarity during review.

Reviewers: earthdok, mclow.lists

Subscribers: cfe-commits

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

llvm-svn: 245334
2015-08-18 19:40:38 +00:00