Commit Graph

127 Commits

Author SHA1 Message Date
Eric Fiselier
207b919735 Bug 39129: Speeding up partition_point/lower_bound/upper_bound/ by using unsigned division by 2 when possible.
Patch by Denis Yaroshevskiy (denis.yaroshevskij@gmail.com)

The rational and measurements can be found in the bug description: https://bugs.llvm.org/show_bug.cgi?id=39129

Reviewed as https://reviews.llvm.org/D52697


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345525 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-29 19:25:02 +00:00
Eric Fiselier
293b83d6e6 Fix PR39458 _LIBCPP_DEBUG breaks heterogeneous compare.
The types/comparators passed to std::upper_bound and std::lower_bound
are not required to provided to provide an operator</comp(...) which
accepts the arguments in reverse order. Nor are the ranges required
to have a strict weak ordering.

However, in debug mode we attempted to check the result of a comparison
with the arguments reversed, which may not compiler.

This patch removes the use of the debug comparator for upper_bound
and lower_bound.

equal_range et al still use debug comparators when they call
__upper_bound and __lower_bound.

See llvm.org/PR39458

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345434 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-26 22:54:46 +00:00
Marshall Clow
c7cc66995c Do the math in uniform_int_distribution::operator() as unsigned to prevent UB when overflowing. Also add a UBSAN notification that we're ffine with unsigned overflow. This fixes PR#32617. Thanks to Vincent & Christoph for their help with this issue.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@343996 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-08 20:20:34 +00:00
Louis Dionne
13cf3b9b36 [libc++] Add deprecated attributes to many deprecated components
Summary:
These deprecation warnings are opt-in: they are only enabled when the
_LIBCXX_DEPRECATION_WARNINGS macro is defined, which is not the case
by default. Note that this is a first step in the right direction, but
I wasn't able to get an exhaustive list of all deprecated components
per standard, so there's certainly stuff that's missing. The list of
components this commit marks as deprecated is:

in C++11:
- auto_ptr, auto_ptr_ref
- binder1st, binder2nd, bind1st(), bind2nd()
- pointer_to_unary_function, pointer_to_binary_function, ptr_fun()
- mem_fun_t, mem_fun1_t, const_mem_fun_t, const_mem_fun1_t, mem_fun()
- mem_fun_ref_t, mem_fun1_ref_t, const_mem_fun_ref_t, const_mem_fun1_ref_t, mem_fun_ref()

in C++14:
- random_shuffle()

in C++17:
- unary_negate, binary_negate, not1(), not2()

<rdar://problem/18168350>

Reviewers: mclow.lists, EricWF

Subscribers: christof, dexonsmith, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@342843 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-23 18:35:00 +00:00
Marshall Clow
e3973fd962 Implement the infrastructure for feature-test macros. Very few actual feature test macros, though. Reviewed as: https://reviews.llvm.org/D51955
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@342073 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-12 19:41:40 +00:00
Marshall Clow
53c8e25037 Fix PR# 38900 - don't call swap inside of random_shuffle when we'd be swapping an element with itself
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@341975 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-11 18:33:45 +00:00
Eric Fiselier
c39fe08b20 Add diagnostics for min/max algorithms when a InputIterator is used.
These algorithms require a ForwardIterator or better. Ensure
we diagnose the contract violation at compile time instead of
of silently doing the wrong thing.

Further algorithms will be audited in upcoming patches.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@340426 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-22 17:47:13 +00:00
Marshall Clow
6c372355ba Recommit r339943 - Establish the <bit> header. NFC yet. Reviewed as https://reviews.llvm.org/D50815 - with a fix for the sanitizer bots
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@340045 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-17 16:07:48 +00:00
Vitaly Buka
245791ae73 Revert "Establish the <bit> header. NFC yet. Reviewed as https://reviews.llvm.org/D50815"
Breaks build on sanitizer bots.

This reverts commit r339943.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@339971 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-16 23:57:16 +00:00
Marshall Clow
fbd46738b1 Establish the <bit> header. NFC yet. Reviewed as https://reviews.llvm.org/D50815
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@339943 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-16 21:35:38 +00:00
Marshall Clow
0d0b972927 Mark __equal_to 's operations as constexpr.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@337087 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-14 04:15:19 +00:00
Marshall Clow
c005c7e34c Make internal class __wrap_iter constexpr when not using libc++'s debugging mode. Introduce a new macro _LIBCPP_CONSTEXPR_IF_NODEBUG to mark this.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@337019 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-13 16:35:26 +00:00
Marshall Clow
f477af5fda Fix misleading indentation; replace a couple of NULLs with nullptr. Resolves https://reviews.llvm.org/D42945 ; thanks to Bruce Mitchener for the patch.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@324378 91177308-0d34-0410-b5e6-96231b3b80d8
2018-02-06 18:58:05 +00:00
Peter Collingbourne
27c341db41 Fix the BinaryPredicate form of std::is_permutation to not rely on operator==
According to [1], forms 2 and 4 of std::is_permutation should use the passed in
binary predicate to compare elements. operator== should only be used for forms
1 and 3 which do not take a binary predicate.

This CL fixes forms 2 and 4 which relied on operator== for some comparisons.

[1] http://en.cppreference.com/w/cpp/algorithm/is_permutation

Patch by Thomas Anderson!

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323563 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-26 21:23:27 +00:00
Marshall Clow
5b12e3bdb4 Last batch of P0202 constexpr additions: includes/set_intersection/exchange
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323159 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-22 23:10:40 +00:00
Marshall Clow
63be4189d8 Another batch of P0202 constepr algirithms. remove/remove_if/remove_copy/remove_copy_if/reverse_copy, and tests (commented out) for rotate_copy, because that depends on std::copy
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323152 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-22 21:43:04 +00:00
Marshall Clow
a15161a030 Still more P0202 constexpr-ifying. This batch is: for_each/for_each_n/lexicographical_compare
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323147 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-22 20:44:33 +00:00
Marshall Clow
48a4655868 More P0202 constexpr work. This commit adds fill/fill_n/generate/generate_n/unique/unique_copy. I removed a specialization of fill_n that recognized when we were dealing with raw pointers and 1 byte trivially-assignable types and did a memset, because the compiler will do that optimization for us.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323050 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-20 20:14:32 +00:00
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
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
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
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
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
Alexander Richardson
e208d0895a Rename identifiers named __output
Summary:
In the CHERI clang compiler __output and __input are keywords and therefore
we can't compile libc++ with our compiler.

Reviewers: mclow.lists, EricWF, theraven

Reviewed By: EricWF

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@318144 91177308-0d34-0410-b5e6-96231b3b80d8
2017-11-14 11:14:25 +00:00
Marshall Clow
c3fa9655a4 Fix PR#35119 : set_union misbehaves with move_iterators. Thanks to Denis Yaroshevskiy for both the bug report and the fix.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@316914 91177308-0d34-0410-b5e6-96231b3b80d8
2017-10-30 15:50:00 +00:00
Marshall Clow
1e32db7b33 Revert 313789 because gcc doesn't like it
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@313803 91177308-0d34-0410-b5e6-96231b3b80d8
2017-09-20 19:38:43 +00:00
Marshall Clow
9641305bba Mark the __eval methods on independent_bits_engine (and __independent_bits_engine) as const, since they make no changes to the object. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@313789 91177308-0d34-0410-b5e6-96231b3b80d8
2017-09-20 18:32:08 +00:00
Marshall Clow
e2b6832fcd Fix a bit of UB in __independent_bits_engine. Fixes PR#34663
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@313776 91177308-0d34-0410-b5e6-96231b3b80d8
2017-09-20 17:34:11 +00:00
Marshall Clow
25a78dcd77 Fix PR31166: std::inplace_merge seems to be unstable. Thanks to Jan Wilken Dörrie for the suggested fix.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@311952 91177308-0d34-0410-b5e6-96231b3b80d8
2017-08-28 23:16:13 +00:00
Shoaib Meenai
0d6a92ed81 [libc++] Clean up cl warning 4231 disabling
Once upon a time, extern templates used to be a Microsoft extension, so
cl would warn about their usage, and libc++ suppressed that warning.
They've long since been standardized, so the warning is defunct. (libc++
also doesn't currently support building with cl anyway.)

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@307997 91177308-0d34-0410-b5e6-96231b3b80d8
2017-07-14 03:56:54 +00:00
Eric Fiselier
018a3d51a4 [Libc++] Use #pragma push_macro/pop_macro to better handle min/max on Windows
Summary:
This patch improves how libc++ handles min/max macros within the headers. Previously libc++ would undef them and emit a warning.
This patch changes libc++ to use `#pragma push_macro`  to save the macro before undefining it, and `#pragma pop_macro` to restore the macros and the end of the header.

Reviewers: mclow.lists, bcraig, compnerd, EricWF

Reviewed By: EricWF

Subscribers: cfe-commits, krytarowski

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304357 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-31 22:07:49 +00:00
Eric Fiselier
ac633a2a52 Remove uses of _UI because Windows is evil and tchar.h #define's it
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304348 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-31 21:20:18 +00:00
Marshall Clow
798ecd6c0f Last commit included some extra constexpr; remove them
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@303862 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-25 14:20:26 +00:00
Marshall Clow
efae8792d8 Make for_each_n only avaliable on C++17
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@303856 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-25 13:40:57 +00:00
Marshall Clow
10411c1626 Add non-parallel version of for_each_n (+tests) from the Parallelism TS
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@303833 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-25 02:29:54 +00:00
Eric Fiselier
ca91fd09f7 Don't interfere with the __builtin_foo namespace under MSVC
This patch follows up on feedback received in the review for
D32988. Specifically that libc++ should not mess with the
__builtin namespace, and that libc++ should use __popcnt to implement
__pop_count under MSVC.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@302731 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-10 21:30:04 +00:00
Eric Fiselier
41af64afad [libc++] Refactor Windows support headers.
Summary:
This patch refactors and tries to remove as much of the Windows support headers as possible. This is needed because they currently introduce super weird include cycles and dependencies between STL and libc headers.

The changes in this patch are:

* remove `support/win32/support.h` completely. The required parts have either been moved into `support/win32/msvc_support.h` (for `MSVC` only helpers not needed by Clang), or directly into their respective `foo.h` headers.

* Combine `locale_win32.h` and `locale_mgmt_win32.h` into a single headers, this header should only be included within `__locale` or `locale` to avoid include cycles.

* Remove the unneeded parts of `limits_win32.h` and re-name it to `limits_msvc_win32.h` since it's only needed by Clang.

I've tested this patch using Clang on Windows, but I suspect it might technically regress our non-existent support for MSVC. Is somebody able to double check?

This refactor is needed to support upcoming fixes to `<locale>` on Windows.



Reviewers: bcraig, rmaprath, compnerd, EricWF

Reviewed By: EricWF

Subscribers: majnemer, cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@302727 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-10 20:57:45 +00:00
Eric Fiselier
6b17a7ba2c Cleanup _LIBCPP_HAS_NO_<c++11-feature> in algorithm
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@300625 91177308-0d34-0410-b5e6-96231b3b80d8
2017-04-18 23:26:47 +00:00
Eric Fiselier
6547dc88b4 Fix C++17 dylib build
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@299401 91177308-0d34-0410-b5e6-96231b3b80d8
2017-04-03 23:23:44 +00:00
Marshall Clow
03b862f6ea Remove random_shuffle in C++17. Please use shuffle instead. If you have to, you cant get it back by defining _LIBCPP_ENABLE_CXX17_REMOVED_RANDOM_SHUFFLE before including any libc++ headers.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@298597 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-23 13:43:37 +00:00
Eric Fiselier
c60e8fcdcd Replace identifiers called __out because Windows.h #defines it.
Windows is greedy and it defines the identifier `__out` as a macro.
This patch renames all conflicting libc++ identifiers in order
to correctly work on Windows.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291345 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-07 11:27:06 +00:00
Eric Fiselier
2c8aa056f4 Fix __wrap_iter in debug mode and apply _NOEXCEPT_DEBUG to it
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290654 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-28 05:35:32 +00:00
Eric Fiselier
0e5ebbc77c Fix unused parameters and variables
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290459 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-23 23:37:52 +00:00