Commit Graph

2144 Commits

Author SHA1 Message Date
Marshall Clow
a75d61347e More P0202 constexpr-ifying in <algorithm>. This commit handles replace/replace_if/replace_copy/replace_copy_if.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322975 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-19 18:07:29 +00:00
Marshall Clow
ecd1909f5f More P0202 constexpr-ifying in <algorithm>. This commit handles 'transform'.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322970 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-19 17:45:39 +00:00
Peter Collingbourne
eb3052ca5d libcxx: Disable CFI in function std::get_temporary_buffer.
The specification of this function mandates a cast to uninitialized
T*, which is forbidden under CFI.

Differential Revision: https://reviews.llvm.org/D42146

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322744 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-17 19:32:35 +00:00
Peter Collingbourne
9c2eed8caf libcxx: Stop using private MSVC macros in the exception implementation.
Inline the provided "fallback" definitions (which seem to always be
taken) that expand to __cdecl into users. The fallback definitions
for the *CRTIMP* macros were wrong in the case where the CRT is being
linked statically, so define our own macro as a replacement.

Differential Revision: https://reviews.llvm.org/D42158

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322617 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-17 04:37:04 +00:00
Marshall Clow
d6082200f6 More constexpr algorithms from P0202. search/search_n
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322566 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-16 15:48:27 +00:00
Marshall Clow
661dff0e60 Change an internal table of constants for the poisson distribution from
type 'result_type' to 'double'. The only thing that we ever do with
these numbers is to promote them to 'double' and use them in a division.
For small result_types, the values were getting truncated, skewing the
results. Thanks to James Nagurne for the suggestion.



git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322556 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-16 14:54:36 +00:00
Marshall Clow
39b886259e More constexpr algorithms from P0202: lower_bound, upper_bound, equal_range, binary_search
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322529 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-16 02:34:41 +00:00
Marshall Clow
4cd596538b More constexpr (re P0202) - equal and mismatch
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322527 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-16 02:04:10 +00:00
Marshall Clow
0dc8ca7729 More constexpr from P0202. count and count_if. Also fix a comment that Morwenn noted.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322506 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-15 19:40:34 +00:00
Marshall Clow
6a1c2ffea4 More P0202 constexpr-ifying. All the find_XXX algorithms in this commit.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322504 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-15 19:26:05 +00:00
Marshall Clow
bb8010f6f2 partition_point gets the P0202 treatment
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322493 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-15 17:53:34 +00:00
Marshall Clow
de4b2869d7 More constexpr algorithms from P0202. any_of/all_of/none_of.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322492 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-15 17:20:36 +00:00
Marshall Clow
8d0d82585a First part of P0202: Adding constexpr modifiers to functions in <algorithm> and <utility>. This commit is all the is_XXX algorithms.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322489 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-15 16:16:32 +00:00
Volodymyr Sapsai
68050ff61f [libcxx] Make std::basic_istream::get 0-terminate input array in case of error.
It covers the cases when the sentry object returns false and when an exception
was thrown. Corresponding standard paragraph is C++14 [istream.unformatted]p9:
  [...] In any case, if n is greater than zero it then stores a null
  character into the next successive location of the array.

rdar://problem/35566567

Reviewers: EricWF, mclow.lists

Reviewed By: mclow.lists

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D40677


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322326 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-11 23:23:49 +00:00
Marshall Clow
d09b2ed53e Implement an _is_allocator type trait for use in deduction guides.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322306 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-11 19:36:22 +00:00
Peter Collingbourne
fa614b847a libcxx: Stop providing a definition of __GLIBC_PREREQ.
An application may determine whether the C standard library is glibc
by testing whether __GLIBC_PREREQ is defined. This breaks if libc++
provides its own definition. Instead, define our own macro in our
namespace with the desired semantics.

Differential Revision: https://reviews.llvm.org/D41892

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322201 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-10 18:16:58 +00:00
Dan Albert
0e3a508af4 Revert "Make rehash(0) work with ubsan's unsigned-integer-overflow."
Seems to have broken some tests since I first wrote this a while
back. Will reland after checking what went wrong with the tests.

This reverts commit 7023194c8d.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322039 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-08 22:57:12 +00:00
Dan Albert
7023194c8d Make rehash(0) work with ubsan's unsigned-integer-overflow.
Reviewers: mclow.lists, EricWF

Reviewed By: mclow.lists

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D40743

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322031 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-08 21:49:12 +00:00
Marshall Clow
334063336b Add the C++17 extensions to std::search. Include the default searcher, but not the Boyer-Moore or Boyer-Moore-Horspool searcher (yet). BUT put the BM and BMH tests in place, marked to XFAIL. The other searchers will follow soon
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322019 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-08 19:18:00 +00:00
Marshall Clow
a2ec0c0a44 Mark the transparent version set::count() as const. Thanks to Ivan Matek for the bug report.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@321966 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-07 17:39:57 +00:00
Dimitry Andric
fbc5de6ac4 Add pre-C++11 is_constructible wrappers for 3 arguments
Summary:
After rL319736 for D28253 (which fixes PR28929), gcc cannot compile `<memory>` anymore in pre-C+11 modes, complaining:

```
In file included from /usr/include/c++/v1/memory:648:0,
                 from test.cpp:1:
/usr/include/c++/v1/memory: In static member function 'static std::__1::shared_ptr<_Tp> std::__1::shared_ptr<_Tp>::make_shared(_A0&, _A1&, _A2&)':
/usr/include/c++/v1/memory:4365:5: error: wrong number of template arguments (4, should be at least 1)
     static_assert((is_constructible<_Tp, _A0, _A1, _A2>::value), "Can't construct object in make_shared" );
     ^
In file included from /usr/include/c++/v1/memory:649:0,
                 from test.cpp:1:
/usr/include/c++/v1/type_traits:3198:29: note: provided for 'template<class _Tp, class _A0, class _A1> struct std::__1::is_constructible'
 struct _LIBCPP_TEMPLATE_VIS is_constructible
                             ^~~~~~~~~~~~~~~~
In file included from /usr/include/c++/v1/memory:648:0,
                 from test.cpp:1:
/usr/include/c++/v1/memory:4365:5: error: template argument 1 is invalid
     static_assert((is_constructible<_Tp, _A0, _A1, _A2>::value), "Can't construct object in make_shared" );
     ^
/usr/include/c++/v1/memory: In static member function 'static std::__1::shared_ptr<_Tp> std::__1::shared_ptr<_Tp>::allocate_shared(const _Alloc&, _A0&, _A1&, _A2&)':
/usr/include/c++/v1/memory:4444:5: error: wrong number of template arguments (4, should be at least 1)
     static_assert((is_constructible<_Tp, _A0, _A1, _A2>::value), "Can't construct object in allocate_shared" );
     ^
In file included from /usr/include/c++/v1/memory:649:0,
                 from test.cpp:1:
/usr/include/c++/v1/type_traits:3198:29: note: provided for 'template<class _Tp, class _A0, class _A1> struct std::__1::is_constructible'
 struct _LIBCPP_TEMPLATE_VIS is_constructible
                             ^~~~~~~~~~~~~~~~
In file included from /usr/include/c++/v1/memory:648:0,
                 from test.cpp:1:
/usr/include/c++/v1/memory:4444:5: error: template argument 1 is invalid
     static_assert((is_constructible<_Tp, _A0, _A1, _A2>::value), "Can't construct object in allocate_shared" );
     ^
```

This is also reported in https://bugs.freebsd.org/224946 (FreeBSD is apparently one of the very few projects that regularly builds programs against libc++ with gcc).

The reason is that the static assertions are invoking `is_constructible` with three arguments, while gcc does not have the built-in `is_constructible` feature, and the pre-C++11 `is_constructible` wrappers in `<type_traits>` only provide up to two arguments.

I have added additional wrappers for three arguments, modified the `is_constructible` entry point to take three arguments instead, and added a simple test to is_constructible.pass.cpp.

Reviewers: EricWF, mclow.lists

Reviewed By: EricWF

Subscribers: krytarowski, cfe-commits, emaste

Differential Revision: https://reviews.llvm.org/D41805

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@321963 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-07 16:45:11 +00:00
Saleem Abdulrasool
23bd3c5356 Correct mistake in pragma usage for Windows
The autolink pragma was missing the pragma name itself.  This would
result in the pragma being silently dropped.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@321937 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-06 18:47:03 +00:00
Martin Storsjo
16eb426933 [cmake] Add a config option LIBCXX_HAS_WIN32_THREAD_API for enforcing win32 threads
This allows keeping libcxx using win32 threads even if a
version of pthread.h is installed.

This matches the existing cmake option LIBCXX_HAS_PTHREAD_API.

Also add missing documentation about the internal define
_LIBCPP_HAS_THREAD_API_WIN32.

Differential Revision: https://reviews.llvm.org/D41764

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@321896 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-05 20:48:29 +00:00
Billy Robert O'Neal III
70a8aae298 Fix incorrect handling of move-only types in transform_reduce iter iter iter init, and add test.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@321851 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-05 01:31:57 +00:00
Billy Robert O'Neal III
b68e9c13a0 Automated trailing whitespace removal by VS Code.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@321850 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-05 01:31:55 +00:00
Hans Wennborg
ac3c89d6a3 Update version to 7.0.0svn: cmake, include files and docs
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@321725 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-03 15:40:29 +00:00
Marshall Clow
73d6c99b8b Implement p0258r2: has_unique_object_representations
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@321685 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-03 02:32:28 +00:00
Marshall Clow
97adf8a38e One more (should be) inline variable that is defined in the dylib
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@321666 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-02 19:23:30 +00:00
Marshall Clow
4e498577b5 Un-inline a few more variables that are exported from the dylib.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@321664 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-02 19:01:45 +00:00
Marshall Clow
136dc563ad Temporarily revert the inlining of 'piecewise_construct' because it is exported from the dylib.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@321663 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-02 18:57:47 +00:00
Marshall Clow
c1ab13d9df A couple more inlined variables that I missed the first time
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@321661 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-02 18:41:01 +00:00
Marshall Clow
c58e4723e7 Implement most of P0607: Inline Variables for the Standard Library. This involved marking a lot of variables as inline (but only for C++17 and later).
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@321658 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-02 17:17:01 +00:00
Marshall Clow
de0811ac71 Fix the definitions of 'reference' and 'pointer' in string_view that no one uses :-). Thanks to K-ballo for the catch.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@321188 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-20 16:31:40 +00:00
Peter Collingbourne
4b54e0fc2a libcxx: Fix for basic_stringbuf::seekoff() after r320604.
As a result of this change, the basic_stringbuf constructor that
takes a mode ends up leaving __hm_ set to 0, causing the comparison
"__hm_ - __str_.data() < __noff" in seekoff() to succeed, which caused
the function to incorrectly return -1. The fix is to account for the
possibility of __hm_ being 0 when computing the distance from __hm_
to the start of the string.

Differential Revision: https://reviews.llvm.org/D41319

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@321124 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-19 23:33:16 +00:00
Sam Clegg
5638e7b9c4 [libcxx] Add WebAssembly support
It turns out that this is the only change required in libcxx
for it to compile with the new `wasm32-unknown-unknown-wasm`
target recently added to Clang.

Patch by Nicholas Wilson!

Differential Revision: https://reviews.llvm.org/D41073

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@320925 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-16 18:59:50 +00:00
Zhihao Yuan
4159a369fe [libcxx] Fix basic_stringbuf constructor
Summary:
[libcxx] Fix basic_stringbuf constructor

The C++ Standard [stringbuf.cons]p1 defines the effects of the basic_stringbuf
constructor that takes ios_base::openmode as follows:
  Effects: Constructs an object of class basic_stringbuf, initializing the
  base class with basic_streambuf(), and initializing mode with which.
  Postconditions: str() == "".

The default constructor of basic_streambuf shall initialize all its
pointer member objects to null pointers [streambuf.cons]p1.

Currently libc++ calls "str(string_type());" in the aforementioned constructor
setting basic_streambuf's pointers to a non-null value.

This patch removes the call (note that the postcondition str() == ""
remains valid because __str_ is default-initialized) and adds a test checking
that the basic_streambuf's pointers are null after construction.

Thanks Mikhail Maltsev for the patch.

Reviewers: EricWF, mclow.lists

Reviewed By: mclow.lists

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D40707

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@320604 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-13 18:12:55 +00:00
Zhihao Yuan
e445521637 [libcxx] P0604, invoke_result and is_invocable
Summary:
Introduce a new form of `result_of` without function type encoding.

Rename and split `is_callable/is_nothrow_callable` into `is_invocable/is_nothrow_invocable/is_invocable_r/is_nothrow_invocable_r` (and associated types accordingly)

Change function type encoding of previous `is_callable/is_nothrow_callable` traits to conventional template type parameter lists.


Reviewers: EricWF, mclow.lists, bebuch

Reviewed By: EricWF, bebuch

Subscribers: lichray, bebuch, cfe-commits

Differential Revision: https://reviews.llvm.org/D38831

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@320509 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-12 18:42:04 +00:00
Casey Carter
5f7683b2d2 workaround PR 28385 in __find_exactly_one_checked
Fixes #35578.

Differential Revision: D41048

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@320500 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-12 17:22:24 +00:00
Roger Ferrer Ibanez
4a3242f1dc [libcxx] Define istream_iterator equality comparison operators out-of-line
Currently libc++ defines operator== and operator!= as friend functions in the
definition of the istream_iterator class template. Such definition has a subtle
difference from an out-of-line definition required by the C++ Standard: these
functions can only be found by argument-dependent lookup, but not by qualified
lookup.

This patch changes the definition, so that it conforms to the C++ Standard and
adds a check involving qualified lookup to the test suite.

Patch contributed by Mikhail Maltsev.

Differential Revision: https://reviews.llvm.org/D40415



git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@320363 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-11 13:54:58 +00:00
Shoaib Meenai
a75f2f1e3c [libc++] Unbreak Apple buildbots
These buildbots are using the deprecated target name install-libcxx-headers
instead of the more up to date install-cxx-headers, so I need to add an
install-libcxx-headers-stripped target to satisfy them.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@320201 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-08 21:50:32 +00:00
Shoaib Meenai
cd9466e36f [libc++] Create install-stripped targets
LLVM is gaining install-*-stripped targets to perform stripped installs,
and in order for this to be useful for install-distribution, all
potential distribution components should have stripped installation
targets. LLVM has a function to create these install targets, but since
we can't use LLVM CMake functions in libc++, let's do it manually.

Differential Revision: https://reviews.llvm.org/D40680

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@319959 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-06 21:03:42 +00:00
Saleem Abdulrasool
c945ad4df0 Enable auto-linking on Windows
The MSVC driver and clang do not link against the C++ runtime
explicitly.  Instead, they rely on the auto-linking via the pragma
(through `use_ansi.h`) to link against the correct version of the C++
runtime.  Attempt to do something similar here so that linking real C++
code on Windows does not require the user to explicitly specify
`c++.lib` when using libc++ as a C++ runtime on windows.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@319816 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-05 19:32:49 +00:00
Shoaib Meenai
54b78ffabb [libcxx] Fix intrinsics for MSVC
The parameter was previously renamed but MSVC path was not updated.

Patch by Andrey Khalyavin.

Differential Revision: https://reviews.llvm.org/D40774

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@319802 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-05 17:46:23 +00:00
Marshall Clow
ab7cb215b0 Mark a couple of internal routines as 'noexcept'
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@319779 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-05 15:56:26 +00:00
Marshall Clow
df68ebc39b Land D28253 which fixes PR28929 (which we mistakenly marked as fixed before)
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@319736 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-05 04:09:49 +00:00
Marshall Clow
8f6293b39e Implement more of P0600: '[[nodiscard]] in the library' for C++2a
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@319710 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-04 23:03:42 +00:00
Marshall Clow
46b4ad5400 Implement P0457R2: 'String Prefix and Suffix Checking' for c++2a
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@319687 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-04 20:11:38 +00:00
Marshall Clow
aeded2bf6e Fix PR#35948: generate_n does not accept floating point Size arguments.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@319675 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-04 18:59:14 +00:00
Petr Hosek
4861f6dfdd [libcxx] Support getentropy as a source of randomness for std::random_device
Use this source use on Fuchsia where this is the oficially way
to obtain randomness. This could be also used on other platforms
that already support getentropy such as *BSD or Linux.

Differential Revision: https://reviews.llvm.org/D40319

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@319523 91177308-0d34-0410-b5e6-96231b3b80d8
2017-12-01 06:34:33 +00:00
Marshall Clow
06f2e0050f Fix problems with r'890 when building on machines where sizeof(size_t) != sizeof(unsigned long long) and C++03
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@319106 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-27 22:27:22 +00:00