Commit Graph

893 Commits

Author SHA1 Message Date
Eric Fiselier aa873af53d [libcxx] expose experimental::erased_type for all standard versions.
Summary: The polymorphic allocator implementation would greatly benefit by defining virtual functions in the dynlib instead of inline. In order to do that some types are going to have to be available outside of c++1y. This is the first step.

Reviewers: mclow.lists, EricWF

Reviewed By: EricWF

Subscribers: cfe-commits

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

llvm-svn: 213889
2014-07-24 19:17:38 +00:00
Eric Fiselier 567bb79bf2 D4451: Fix copy/move issues casude by __tuple_leafs's converting constructor
llvm-svn: 213888
2014-07-24 18:48:34 +00:00
Dan Albert a950658e3c Fix ctype_base::xdigit for Android.
Android's ctype implementation comes from openbsd, which for some reason
doesn't consider numbers to be hex digits.

llvm-svn: 213785
2014-07-23 19:32:03 +00:00
Marshall Clow 8116e1d1c3 Update the synopsis and comments with the results of LWG #2255. No code to back it up at the moment; just comments
llvm-svn: 213768
2014-07-23 16:58:25 +00:00
David Majnemer 8b51260274 Fix std::make_heap's worst case time complexity
std::make_heap is currently implemented by iteratively applying a
siftup-type algorithm.  Since sift-up is O(ln n), this gives
std::make_heap a worst case time complexity of O(n ln n).

The C++ standard mandates that std::make_heap make no more than O(3n)
comparisons, this makes our std::make_heap out of spec.

Fix this by introducing an implementation of __sift_down and switch
std::make_heap to create the heap using it.
This gives std::make_heap linear time complexity in the worst case.

This fixes PR20161.

llvm-svn: 213615
2014-07-22 06:07:09 +00:00
Marshall Clow f915d67c60 make the same change as in 213546 for vector<bool>
llvm-svn: 213547
2014-07-21 15:15:15 +00:00
Marshall Clow 0df880209d In response to bug #20362, change the order of operations in vector move assignment so that if the allocator move assignment throws, we aren't left with two objects pointing at the same memory. This is not a complete fix; I am unconvinced that a complete fix is possible. With this change in place, we will leak the old contents of the vector. LWG issue #2106, when adopted, will make this problem illegal. Thanks to Thomas Koeppe for the report and analysis.
llvm-svn: 213546
2014-07-21 15:11:13 +00:00
Marshall Clow 3dd8846840 Fix bug #20335 - memory leak when move-constructing a string with unequal allocator. Thanks to Thomas Koeppe for the report
llvm-svn: 213269
2014-07-17 15:32:20 +00:00
Eric Fiselier 531d8b2bc4 [libcxx] Add <experimental/utility> header for LFTS.
Summary:
This patch adds the `<experimental/utility>` header as specified in the latest draft of the library fundamentals TS.

`<experimental/utility>` only contains `class erased_type`. 

This patch also updates the documentation to list the `erased_type` class as "initial implementation complete".

Test Plan:
Three test cases where added:

1. Test that `_LIBCPP_VERSION` is defined.
2. Test that `<utility>` has been included.
3. Test that `erased_type` is in the correct namespace and is constexpr default constructible.

Reviewers: mclow.lists

Reviewed By: mclow.lists

Subscribers: cfe-commits

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

llvm-svn: 213226
2014-07-17 05:31:31 +00:00
Eric Fiselier 371aac1adb Change _LIBCXX_CONSTEXPR_AFTER_CXX11 to check for c++14 constexpr rules
llvm-svn: 213225
2014-07-17 05:16:18 +00:00
Marshall Clow f52c88f015 Correctly implement LWG 2049; std::is_destructible.
llvm-svn: 213163
2014-07-16 15:51:50 +00:00
Saleem Abdulrasool f4a391c07f Change Windows decoration on some base classes
Mark the base classes for time_get_byname and time_get as _LIBCPP_TYPE_VIS_ONLY
rather than _LIBCPP_TYPE_VIS.  These base classes are templated types and cannot
be stored with export dll storage.

Fixes compilation with _LIBCPP_DLL for Windows when the time_get and
time_get_byname classes are used.

llvm-svn: 213116
2014-07-16 01:00:26 +00:00
Marshall Clow 0030af8c35 Support the built-in type-trait support in gcc 4.7 and later. Thanks to Albert Wong for the patch.
llvm-svn: 212727
2014-07-10 15:38:20 +00:00
Marshall Clow b38f8f07c5 Add support for BIONIC C library (Android). Patch from Dan Albert
llvm-svn: 212724
2014-07-10 15:20:28 +00:00
Marshall Clow 926731b1e5 string_view enhancements. Move to the correct namespace. Better constexpr support (thanks to Richard for the suggestions). Update the tests to match this. Add <experimental/__config for experimental macros/etc to live.
llvm-svn: 212569
2014-07-08 22:38:11 +00:00
Marshall Clow 35af19ab1f Minor cleanup for string_view; mostly from suggestions by Richard Smith. Also, make the tests pass under c++03
llvm-svn: 212185
2014-07-02 15:45:57 +00:00
Marshall Clow 38cae6330b Fix libc++ bug #20039: 'Constructing std::function from empty compatible std::function results in half-empty state' Thanks to Agustin Berge for the report, and for his and Eric Fiselier's work on a fix.
llvm-svn: 212070
2014-06-30 21:27:51 +00:00
Marshall Clow afa72ed47c Fix a typo in the noexcept calculation for __compressed_pair::swap. Thanks to EricWF for the bug report and the fix.
llvm-svn: 212046
2014-06-30 15:35:09 +00:00
Marshall Clow 157a8f91bd Patch from Albert J. Wong to make type_traits take advantage of gcc intrinsics in 4.7 and later. No functionality change when using clang.
llvm-svn: 211755
2014-06-26 01:07:56 +00:00
David Fang ed7987dcfe eliminate install of duplicate headers (take 2)
Patch by Ryuta Suzuki

llvm-svn: 211629
2014-06-24 20:32:11 +00:00
Marshall Clow f9af6140ff Some calls to get<>() were qualified. Some were not. Qualify them all. Fixes bug #20092. Thanks to Agustín Bergé for the bug report and the fix.
llvm-svn: 211563
2014-06-24 00:46:19 +00:00
Marshall Clow 2f4bfdecb3 Formatting improvements in the <string_view> synopsis suggested by RSmith. No functionality change.
llvm-svn: 211191
2014-06-18 17:44:04 +00:00
Marshall Clow 5aa8fa250d Implement string_view from the library fundamentals TS (n4023). Also works in C++11 and 03, with reduced functionality (mostly in the area of constexpr)
llvm-svn: 210659
2014-06-11 16:44:55 +00:00
Marshall Clow 9b0af34d96 Make the helper routines in string really be constexpr. This required a bit of refacoring in algorithm as well. Give them better names while we're at it. All of these are internal rotines; no visible functionality change.
llvm-svn: 210561
2014-06-10 18:51:55 +00:00
Marshall Clow c369914758 Since we now have a value for __cplusplus for c++14, teach libc++ about it
llvm-svn: 210380
2014-06-06 22:31:09 +00:00
Richard Smith ff0aff3caf Use __builtin_operator_new/__builtin_operator_delete when available. This
allows allocations and deallocations to be optimized out.

llvm-svn: 210211
2014-06-04 19:54:15 +00:00
Nico Weber 1d1b46cdf7 Make locales (and transitively, std::endl) work reliably with gcc.
libc++ currently relies on undefined initialization order of global
initializers when using gcc:

1. __start_std_streams in iostream.cpp calls locale:🆔:_init, which assigns
   an id to each locale::facet in an initializer

2. Every facet has a static locale::id id, whose constructor sets the facet's
   id to 0

If 2 runs after 1, it clobbers the facet's assigned consecutive id, causing
exceptions to be thrown when e.g. running code like "cout << endl".

To fix this, let _LIBCPP_CONSTEXPR evaluate to "constexpr" instead of nothing
with gcc.  locale::id's constructor is marked _LIBCPP_CONSTEXPR, which ensures
that it won't get an initializer that could potentially run after the
iostream.cpp initializer. (This remains broken when building with msvc.)

Also switch constexpr-specific code in bitset to use __SIZEOF_SIZE_T__ instead
of __SIZE_WIDTH__, because gcc doesn't define the latter.

Pair-programmed/debugged with Dana Jansens.

llvm-svn: 210188
2014-06-04 15:46:56 +00:00
Marshall Clow 5f0701f270 Preparation for <string_view>. More helper functions that can be shared between <string> and <string_view>. No functionality change
llvm-svn: 210002
2014-06-02 02:22:49 +00:00
Nico Weber 9e3548875a Add a _LIBCPP_CONSTEXPR that was missed in r170026.
(clang doesn't complain about this, but gcc does.  This is necessary for a
follow-up patch that will enable _LIBCPP_CONSTEXPR for gcc.)

llvm-svn: 209888
2014-05-30 12:09:47 +00:00
Marshall Clow 2de60eb213 Fix a problem exposed by r208825, which caused bind (and other bits of libc++) to stop working. And tests
llvm-svn: 209785
2014-05-29 01:10:28 +00:00
Marshall Clow 9393b5113b Fix Bug 19678 - libc++ does not correctly handle the regex: '[^\0]*'
llvm-svn: 209307
2014-05-21 16:29:50 +00:00
Marshall Clow ef0e8c391e Fix bug 19740; round-tripping a pointer through a stream doesn't work
llvm-svn: 209305
2014-05-21 16:02:20 +00:00
Richard Smith 80fd10e6e1 [modules] Add initial module map for libc++.
llvm-svn: 209265
2014-05-21 00:33:49 +00:00
Nico Weber 218f71e148 Update cstddef after clang r207606.
r207606 changed the __need_foo macros to behave like they do with gcc: If they
are set, _only_ the __need_foo stuff gets defined.  As a consequence, cstddef
no longer defined "offsetof".  It looks like the __need_foo defines aren't
needed anymore, so just remove them.

Fixes PR19723.

llvm-svn: 208942
2014-05-16 01:45:02 +00:00
Alp Toker f03763a44b Fix typos
llvm-svn: 208869
2014-05-15 11:27:39 +00:00
Marshall Clow 5c520bd985 Add Address Sanitizer support to std::vector
llvm-svn: 208319
2014-05-08 14:14:06 +00:00
Marshall Clow 0fc6e981b0 Fix PR 19663. Some calls to find(vector<bool>) were returning iterators that were subtly invalid (didn't compare equal). Thanks to Erik Verbruggen for the report (and diagnosis)
llvm-svn: 208096
2014-05-06 15:33:23 +00:00
Joerg Sonnenberger a1fbf3459f Exceptions store the message as reference counted string for
compatibility to libstdc++. Move the implementation into a header for
easier sharing with libc++abi. Merge a number of improvements from that
version. Provide a POD definition for <stdexcept>'s public use to avoid
cast dances. Discussed with Marshall Clow.

llvm-svn: 207695
2014-04-30 19:54:11 +00:00
Marshall Clow 85d3e7a729 Fix bug #18350. Add tests for tuples of all the smart pointers (except auto_ptr)
llvm-svn: 207307
2014-04-26 05:19:48 +00:00
Marshall Clow 7546a111a9 Default the copy and move constructors for __tuple_leaf. This fixes bugs 18853 and 19118. Add a test case for that.
llvm-svn: 206829
2014-04-21 23:48:09 +00:00
Marshall Clow 3d3974b45b Use compiler intrinsic __is_constructible if available
llvm-svn: 206805
2014-04-21 22:30:32 +00:00
Marshall Clow 5f7c2db2ce Bug #19473. If you pass an allocator to std::function, we should use that allocator, not construct one from scratch. Add a test to make sure
llvm-svn: 206623
2014-04-18 17:23:36 +00:00
Marshall Clow c303bba184 Remove some unnecessary noexcept conditions. Thanks to Richard Smith for the catch.
llvm-svn: 206424
2014-04-16 23:12:55 +00:00
Marshall Clow 91c71ddd8d Define a new macro in libc++ named '_LIBCPP_HAS_NO_ASAN'. When this is defined,
libc++ will not call address_sanitizer to detect addressing errors in the
standard library containers. This is a negative macro to enable users to
disable the libc++ checks even if they are compiling with address sanitizer
enabled by defining this macro.

At the present time, there is no code in libc++ that looks at this macro.
That will come soon. This is just infrastructure.

llvm-svn: 206184
2014-04-14 15:44:57 +00:00
Marshall Clow ec959d5f46 Remove node from a container before destroying it. Thanks to Alexander Potapenko for pointing this out.
llvm-svn: 206024
2014-04-11 08:22:42 +00:00
Marshall Clow 886c6a645f Fix PR19819
llvm-svn: 205709
2014-04-07 13:32:26 +00:00
Tim Northover caccac10b7 RTTI Uniqueness: remove __name_for_load function.
It's identical to name() these days. (At one point it avoided masking
of the RTTI uniqueness bit because ARM64 ignored it architecturally,
but no longer).

llvm-svn: 205518
2014-04-03 09:12:38 +00:00
Tim Northover 4b9a505a5e Use defined(__APPLE__) rather than __APPLE__
llvm-svn: 205150
2014-03-30 14:59:12 +00:00
Tim Northover 0090e657cb ARM64: compare RTTI names as strings
ARM64 generates RTTI with hidden visibility, which means that typeinfo
must be compared char-by-char since it's not guaranteed to be uniqued
across the whole program.

llvm-svn: 205139
2014-03-30 11:34:26 +00:00
Tim Northover c3a57e91ef ARM64: use the alternate string layout on Apple platforms.
llvm-svn: 205138
2014-03-30 11:34:22 +00:00