Commit Graph

4735 Commits

Author SHA1 Message Date
Marshall Clow
75075c6be0 Add static_asserts to basic_ios and basic_stream_buf to ensure that that the traits match the character type. This is a requirement on the user - now we get consistent failures at compile time instead of incomprehensible error messages or runtime failures. This is also LWG#2994 - not yet adopted.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323945 91177308-0d34-0410-b5e6-96231b3b80d8
2018-02-01 03:55:27 +00:00
Marshall Clow
37e4c9b159 Implement LWG2870: Default value of parameter theta of polar should be dependent
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323918 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-31 21:42:39 +00:00
Marshall Clow
65c4c248c2 Add LWG3051
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323822 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-30 21:49:17 +00:00
Marshall Clow
64aa1c1b75 First cut at issue statuses for JAX
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323720 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-30 00:48:39 +00:00
Marshall Clow
4bbcce7ef8 Add tests to make sure that <string_view> provides std::size/data/empty in C++17 mode. This is LWG#3009, coming up for a vote in JAX - but we already do it, just don't have tests
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323719 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-30 00:47:43 +00:00
Marshall Clow
6f79a901d1 Minor updated to the main libcxx page; add a link to the deprecation page
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323694 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-29 21:28:46 +00:00
Don Hinton
1dfee5b4d4 LLVM_FOUND isn't always set, so just test if llvm_setup_rpath() is
available instead.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323599 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-27 18:55:30 +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
Don Hinton
44aacb7850 Reland: [cmake] [libcxx] Call llvm_setup_rpath() when adding shared libraries.
Clang and llvm already use llvm_setup_rpath(), so this change will
help standarize rpath usage across all projects.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323492 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-26 01:34:51 +00:00
Peter Collingbourne
2b64fcb946 libcxx: Use vcruntime declarations for typeinfo on Windows.
We need to use the vcruntime declarations on Windows to avoid an
ODR violation involving rtti.obj, which provides the definition of
the runtime function implementing dynamic_cast and depends on the
vcruntime implementations of bad_cast and bad_typeid.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323491 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-26 01:22:17 +00:00
Peter Collingbourne
6b5c08ab34 libcxx: Move #include_next <math.h> out of header guard in wrapper header.
Code on Windows expects to be able to do:

 #define _USE_MATH_DEFINES
 #include <math.h>

and receive the definitions of mathematical constants, even if <math.h>
has previously been included. To support this scenario, re-include
<math.h> every time the wrapper header is included.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323490 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-26 01:19:23 +00:00
Marshall Clow
e686a8dec0 Mark 2903 as complete; we already do this
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323479 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-25 22:33:17 +00:00
Don Hinton
e0c8dbec38 Revert [libcxx] r323453 - [cmake] [libcxx] Call llvm_setup_rpath() when adding shared libraries.
Shoaib Meenai pointed out this will break standalone builds when built without llvm.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323459 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-25 19:22:23 +00:00
Don Hinton
102b0a11f0 [cmake] [libcxx] Call llvm_setup_rpath() when adding shared libraries.
Clang and llvm already use llvm_setup_rpath(), so this change will
help standarize rpath usage across all projects.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323453 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-25 18:13:26 +00:00
Eric Fiselier
8864da5e78 Fix PR35564 - std::list splice/erase incorrectly throw in debug mode.
There was a bug in the implementation of splice where the container
sizes were updated before decrementing one of the iterators. Afterwards,
the result of decrementing the iterator was flagged as UB by the debug
implementation because the container was reported to be empty.

This patch fixes that bug by delaying the updating of the container
sizes until after the iterators have been correctly constructed.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323390 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-25 00:02:48 +00:00
Eric Fiselier
8592d0abce Fix missing return in __tuple_leaf::__can_bind_reference when __reference_binds_to_temporary added in r323380.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323389 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-24 23:10:02 +00:00
Marshall Clow
cc7048888e Implement LWG2783: stack::emplace() and queue::emplace() should return decltype(auto)
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323385 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-24 22:42:25 +00:00
Eric Fiselier
8286acce44 [libc++] Fix PR20855 -- libc++ incorrectly diagnoses illegal reference binding in std::tuple.
Summary:
See https://bugs.llvm.org/show_bug.cgi?id=20855

Libc++ goes out of it's way to diagnose `std::tuple` constructions which are UB due to lifetime bugs caused by reference creation. For example:

```
// The 'const std::string&' is created *inside* the tuple constructor, and its lifetime is over before the end of the constructor call.
std::tuple<int, const std::string&> t(std::make_tuple(42, "abc"));
```

However, we are over-aggressive and we incorrectly diagnose cases such as:

```
void foo(std::tuple<int const&, int const&> const&);
foo(std::make_tuple(42, 42));
```

This patch fixes the incorrectly diagnosed cases, as well as converting the diagnostic to use the newly added Clang trait `__reference_binds_to_temporary`. The new trait allows us to diagnose cases we previously couldn't such as:

```
std::tuple<int, const std::string&> t(42, "abc");
```

Reviewers: rsmith, mclow.lists

Reviewed By: rsmith

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323380 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-24 22:14:01 +00:00
Mikhail Maltsev
e54a22f809 [libcxx] Correctly handle invalid regex character class names
Summary:
Currently when a regular expression contains an invalid character
class name std::regex constructors throw an std::regex_error with
std::regex_constants::error_brack code.

This patch changes the code to std::regex_constants::error_ctype and
adds a test.

Reviewers: EricWF, mclow.lists

Reviewed By: mclow.lists

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323322 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-24 12:45:18 +00:00
Marshall Clow
a351d793ab include <cstdint> to get uint32_t
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323306 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-24 05:38:51 +00:00
Peter Collingbourne
1cadd88562 libcxx: Allow auto-linking to be disabled with a macro.
Some users may have a custom build system which gives a different
name to the libc++ archive (or does not create an archive at all,
instead passing the object files directly to the linker). Give those
users a way to disable auto-linking.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323300 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-24 04:30:19 +00:00
Marshall Clow
a11e68f83b Implement P0463R1: 'Endian just Endian'. Reviewed as https://reviews.llvm.org/D35472
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323296 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-24 01:53:24 +00:00
Peter Collingbourne
087c5abbe4 libcxx: Rename vasprintf function to __libcpp_vasprintf.
The language standard does not define a function with this name,
so it is part of the user's namespace. This change fixes a duplicate
symbol error that occurs when a user attempts to define a function
with this name.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323237 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-23 18:53:33 +00:00
Don Hinton
c0a476159d [cmake] Always respect existing CMAKE_REQUIRED_FLAGS when adding additional ones.
* Previously part of https://reviews.llvm.org/D41622.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323171 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-23 03:30:23 +00:00
Peter Collingbourne
f493c2fed6 libcxx: Provide overloads for basic_filebuf::open() et al that take wchar_t* filenames on Windows.
This is an MSVC standard library extension. It seems like a reasonable
enough extension to me because wchar_t* is the native format for
filenames on that platform.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323170 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-23 02:07:27 +00:00
Peter Collingbourne
59f2389874 libcxx: Move Windows threading support into a .cpp file.
This allows us to avoid polluting the namespace of users of <thread>
with the definitions in windows.h.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323169 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-23 01:59:43 +00:00
Marshall Clow
e2341acabb Update cxx2a status
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323160 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-22 23:17:20 +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
Don Hinton
65d4ee3df0 [cmake] [libcxx] Fix find_path() problems when cross compiling.
When CMAKE_SYSROOT or CMAKE_FIND_ROOT_PATH is set, cmake
recommends setting CMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY
globally which means find_path() always prepends CMAKE_SYSROOT or
CMAKE_FIND_ROOT_PATH to all paths used in the search.

However, this find_path() invocation is looking for a path in the
libcxxabi project on the host system, not the target system,
which can be done by passing NO_CMAKE_FIND_ROOT_PATH.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323143 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-22 19:26:38 +00:00
Marshall Clow
c84b496981 Add (commented out) constexpr tests for copy/copy_backwards/copy_if/copy_n. These will be enabled when that part of P0202 is implemented. NFC at this time.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323137 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-22 18:38:18 +00:00
Marshall Clow
27ae75c894 Really comment out the constexpr tests.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323072 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-22 01:51:49 +00:00
Marshall Clow
46ea17ee62 Change a static_assert to check for is_trivial instead of is_pod, as is mandated by P0767.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323071 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-22 00:17:48 +00:00
Marshall Clow
f7e345ab81 implement (but leave commented out) the constexpr tests from P0202 for std::merge. merge requires std::copy, which isn't constexpr yet.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@323070 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-22 00:11:44 +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
445101c40d Wrote my own version of is_permutation; that was dominating the timings
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322920 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-19 03:17:45 +00:00
Marshall Clow
4bb655f24e Add memory tracking
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322872 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-18 18:37:11 +00:00
Marshall Clow
226431c0d7 Use high_resolution_clock instead of steady_clock. Also now builds with gcc 7.2 (for comparison purposes)
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322864 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-18 17:01:34 +00:00
Marshall Clow
ad7b096282 A simple program for testing OSS-Fuzz test cases locally.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322863 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-18 16:52:19 +00:00
Eric Fiselier
fd2e3e98c1 Update Google Benchmark library
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322812 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-18 04:23:01 +00:00
Eric Fiselier
457d2c157b Fix most GCC test failures.
This patch fixes almost all currently failing tests when
using GCC ToT.

The specific changes are:

(A) Workaround gcc.gnu.org/PR83921 which rejects variables w/o initializers
in constexpr contexts -- even when the variable is an empty class. This
bug has been worked around at all callsites by adding an initializer.
Additionally a new test, constexpr_init.pass.cpp, has been added to
test that Clang doesn't suffer from these bugs.

(B) Fix streambuf.assign/swap.pass.cpp. This test was never actually
calling the swap method as intended. In fact, the swap function it
intended to call was ill-formed when instantiated. GCC diagnosed
this ill-formedness w/o needing an instantiation.

(C) size_delete11.pass.cpp was fixed by adding c++2a to the list of
unsupported dialects.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322810 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-18 03:41:06 +00:00
Peter Collingbourne
a12e237180 libcxx: Define set_unexpected, _get_unexpected and __uncaught_exceptions without dllimport.
It turns out that the MSVC headers define these functions without
dllimport even when compiling with /MD. This change fixes the resulting
compile-time error.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322794 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-18 00:33:35 +00:00
Eric Fiselier
74cb4f5f46 Fix nodiscard failure tests on compilers w/o -verify.
Previously .fail.cpp tests for nodiscard were run with -Wunused-result
being a warning, not an error, when the compiler didn't support -verify.

When -verify isn't enabled this change judiciously adds -Werror=unused-result
when to only the failure tests containing the // expected-error string for nodiscard.

As a drive-by change, this patch also adds a missing // UNSUPPORTED: c++2a to
a test which was only supposed to run in C++ <= 11.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@322776 91177308-0d34-0410-b5e6-96231b3b80d8
2018-01-17 22:48:09 +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