Commit Graph

6205 Commits

Author SHA1 Message Date
Eric Fiselier
e6f91d8017 Make libc++'s versioning namespace customizable
Summary:
This patch makes the versioning namespace libc++ uses customizable by the user using `-DLIBCXX_ABI_NAMESPACE=__foo`. 

This allows users to build custom versions of libc++ which can be linked into binaries with other libc++ versions without causing symbol conflicts or ODR issues. 

Reviewers: mclow.lists, ldionne

Reviewed By: ldionne

Subscribers: kristina, smeenai, mgorny, phosek, libcxx-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345657 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-30 21:44:53 +00:00
Marshall Clow
02bbf435d8 Add link to implementation for P1006R0
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345653 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-30 21:27:42 +00:00
Eric Fiselier
abfbf147f6 Update LLVM version used on Appveyor bot, remove MSVC 2015 bot
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345652 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-30 21:23:31 +00:00
Samuel Benzaquen
3b92bcdcb7 Add more benchmarks for std::string.
Summary:
Added benchmarks for Construct, Copy, Move, Destroy, Relationals and
Read. On the ones that matter, the benchmarks tests hot and cold data,
and opaque and transparent inputs.

Reviewers: EricWF

Subscribers: christof, ldionne, libcxx-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345611 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-30 15:54:22 +00:00
Eric Fiselier
94ce26b410 Unify definition of _LIBCPP_BEGIN/END_NAMESPACE_STD
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345561 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-30 02:02:00 +00:00
Eric Fiselier
3238cbf311 XFAIL test on OS X availability
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345529 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-29 19:52:22 +00:00
Marshall Clow
c5a77b2981 Added Phab link for P0927
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345526 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-29 19:31:35 +00:00
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
Samuel Benzaquen
081dda5c16 Fix mismatch between size_t and uint64_t in std::set benchmark.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345523 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-29 19:08:31 +00:00
Louis Dionne
640fa255b9 [libc++] Use exclude_from_explicit_instantiation instead of always_inline
Summary:
This commit adopts the exclude_from_explicit_instantiation attribute discussed
at [1] and reviewed in [2] in libc++ to supplant the use of __always_inline__
for visibility purposes.

This change means that users wanting to link together translation units built
with different versions of libc++'s headers into the same final linked image
MUST define the _LIBCPP_HIDE_FROM_ABI_PER_TU macro to 1 when building those
TUs. Doing otherwise will lead to ODR violations and ABI issues.

[1]: http://lists.llvm.org/pipermail/cfe-dev/2018-August/059024.html
[2]: https://reviews.llvm.org/D51789

Reviewers: rsmith, EricWF

Subscribers: dexonsmith, libcxx-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345516 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-29 17:30:04 +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
Eric Fiselier
924b8f34f6 Work around gcc.gnu.org/PR87766
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345425 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-26 20:20:12 +00:00
Louis Dionne
73f498b7e0 [NFC] Update comment in libc++ ABI changelog
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345424 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-26 20:08:43 +00:00
Eric Fiselier
e69682670c Fix incorrect use of aligned allocation in get_temporary_buffer.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345403 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-26 17:12:32 +00:00
Eric Fiselier
6dcb34abc2 XFAIL sized deallocation test with GCC
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345400 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-26 16:37:11 +00:00
Marshall Clow
5be216356b Run the min/max tests agaist the header <charconv>. Fix that header so it passes. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345352 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-26 01:00:56 +00:00
Eric Fiselier
b3ae0c8902 fix incorrect placement of _LIBCPP_ALWAYS_INLINE in valarray
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345289 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-25 17:43:26 +00:00
Eric Fiselier
e09f85bbe5 Implement sized deallocation for std::allocator and friends.
Summary:
C++14 sized deallocation is disabled by default due to ABI concerns. However, when a user manually enables it then libc++ should take advantage of it since sized deallocation can provide a significant performance win depending on the underlying malloc implementation. (Note that libc++'s definitions of sized delete don't do anything special yet, but users are free to provide their own).

This patch updates __libcpp_deallocate to selectively call sized operator delete when it's available. `__libcpp_deallocate_unsized` should be used when the size of the allocation is unknown.

On Apple this patch makes no attempt to determine if the sized operator delete is unavailable, only that the language feature is enabled. This could cause a compile error when using `std::allocator`, but the same compile error would occur whenever the user calls `new`, so I don't think it's a problem.

Reviewers: ldionne, mclow.lists

Reviewed By: ldionne

Subscribers: rsmith, ckennelly, libcxx-commits, christof

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345281 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-25 17:21:30 +00:00
Louis Dionne
07f95bd10d [libc++] Make sure we can build libc++ with -fvisibility=hidden
Summary:
When building with -fvisibility=hidden, some symbols do not get exported from
libc++.dylib. This means that some entities are not explicitly given default
visibility in the source code, and that we rely on the fact -fvisibility=default
is the default. This commit explicitly gives default visibility to those
symbols to avoid being dependent on the command line flags used.

The commit also remove symbols from the dylib -- those symbols do not
actually need to be exported from the dylib and this should not be an
ABI break.

Finally, in the future, we may want to mark the whole std:: namespace as
having hidden visibility (to switch from opt-out to opt-in), in which
case the changes done in this commit will be required.

Reviewers: EricWF

Subscribers: mgorny, christof, dexonsmith, libcxx-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345260 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-25 12:13:43 +00:00
Eric Christopher
92d87364ff Revert "Fix use of __libcpp_deallocate in dynarray"
This reverts commit r345234 as it depended on the sized deallocation commit.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345240 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-25 06:43:56 +00:00
Eric Christopher
1b9ee84408 Temporarily Revert "Implement sized deallocation for std::allocator and friends."
This is breaking the bots here (and related): http://lab.llvm.org:8011/builders/libcxx-libcxxabi-x86_64-linux-ubuntu-asan/builds/1428

This reverts commit r345214.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345239 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-25 06:20:12 +00:00
Eric Fiselier
d03e037f46 Fix use of __libcpp_deallocate in dynarray
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345234 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-25 02:36:31 +00:00
Bill Yi
e5ab36283b [automerger skipped] Merge pie-platform-release to aosp-master - DO NOT MERGE am: 20fc590391 -s ours am: 43cd5aba8a -s ours
am: 5445ce5671  -s ours

Change-Id: I4095711dc3a690aad92102b748b713de30cea9ce
2018-10-24 18:58:14 -07:00
Bill Yi
5445ce5671 [automerger skipped] Merge pie-platform-release to aosp-master - DO NOT MERGE am: 20fc590391 -s ours
am: 43cd5aba8a  -s ours

Change-Id: I22964243aa6f751603c7ee2c42d762f16f6f5ba8
2018-10-24 18:24:02 -07:00
Bill Yi
43cd5aba8a [automerger skipped] Merge pie-platform-release to aosp-master - DO NOT MERGE
am: 20fc590391  -s ours

Change-Id: Iab2ba0b43f95098da09c8b6ee77c26e9ec0120f2
2018-10-24 16:10:24 -07:00
Eric Fiselier
0cfdf55219 Implement sized deallocation for std::allocator and friends.
Summary:
C++14 sized deallocation is disabled by default due to ABI concerns. However, when a user manually enables it then libc++ should take advantage of it since sized deallocation can provide a significant performance win depending on the underlying malloc implementation. (Note that libc++'s definitions of sized delete don't do anything special yet, but users are free to provide their own).

This patch updates __libcpp_deallocate to selectively call sized operator delete when it's available. `__libcpp_deallocate_unsized` should be used when the size of the allocation is unknown.

On Apple this patch makes no attempt to determine if the sized operator delete is unavailable, only that the language feature is enabled. This could cause a compile error when using `std::allocator`, but the same compile error would occur whenever the user calls `new`, so I don't think it's a problem.

Reviewers: ldionne, mclow.lists

Reviewed By: ldionne

Subscribers: rsmith, ckennelly, libcxx-commits, christof

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345214 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24 22:44:01 +00:00
Bill Yi
20fc590391 Merge pie-platform-release to aosp-master - DO NOT MERGE
Change-Id: I92be61c172c105196b27b130b35003c3e18c11ef
2018-10-24 14:45:59 -07:00
Petr Hosek
842383f69c Revert "Teach __libcpp_is_floating_point that __fp16 and _Float16 are"
This reverts commits r333103 and r333108. _Float16 and __fp16 are C11
extensions and compilers other than Clang don't define these for C++.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345199 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24 21:29:15 +00:00
Eric Fiselier
005bb4c72c Fix use of libc++ specific macro in support/test_macros.h
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345173 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24 18:37:42 +00:00
Bill Yi
564ade3aaa [automerger skipped] Merge pi-platform-release to stage-aosp-master - DO NOT MERGE am: 762e335897 -s ours
am: 04feea392b  -s ours

Change-Id: Ie6b34df7608b4bb76d4d10616b5d91af316b9606
2018-10-24 11:00:39 -07:00
Bill Yi
04feea392b [automerger skipped] Merge pi-platform-release to stage-aosp-master - DO NOT MERGE
am: 762e335897  -s ours

Change-Id: Ia07da996c904239706e6ddae655cf14a575f6a49
2018-10-24 10:43:00 -07:00
Bill Yi
762e335897 Merge pi-platform-release to stage-aosp-master - DO NOT MERGE
Change-Id: I022c3a6068c31482a3638b090d8dece007afd8a7
2018-10-24 09:05:47 -07:00
Mikhail Maltsev
0423faff95 Adjust unsupported C++ versions in some tests
Summary:
Some tests (mainly the new C++20 calendar library) fail when libc++ is
tested with '--param=std=c++98'. The failures happen because the tests
actually don't support C++98, but don't mention C++98 in the
'UNSUPPORTED:' line.

This change fixes the issue.

Reviewers: mclow.lists, ldionne

Reviewed By: ldionne

Subscribers: arphaman, michaelplatings, libcxx-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345148 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24 15:09:08 +00:00
Dan Willemsen
b3e47e2fe4 Merge "Remove libunwindbacktrace from linux_bionic" am: 3d305e3daa am: e1f6d4c7e3
am: a47f434e82

Change-Id: I3753ae9a85a9645c532f5ce6fbe9a63a993d7219
2018-10-23 13:54:26 -07:00
Dan Willemsen
a47f434e82 Merge "Remove libunwindbacktrace from linux_bionic" am: 3d305e3daa
am: e1f6d4c7e3

Change-Id: I318be434b08c1d7b05e13a4614566b64af75d7d3
2018-10-23 13:49:54 -07:00
Dan Willemsen
e1f6d4c7e3 Merge "Remove libunwindbacktrace from linux_bionic"
am: 3d305e3daa

Change-Id: I0ff275030552271f0b919784bdd4012646a322ab
2018-10-23 13:42:44 -07:00
Treehugger Robot
3d305e3daa Merge "Remove libunwindbacktrace from linux_bionic" 2018-10-23 20:29:19 +00:00
Marshall Clow
ec22e35e69 Off-by-one errors strike again. Thank goodness for ASAN and the bots.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345076 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-23 20:07:45 +00:00
Marshall Clow
b994bfeaac When filling a vector<bool> with stuff, initialize the last word of the storage that you're touching. Otherwise, when we lay down the bits with operator&=, we get UB from reading uninitialized memory. Fixes Bug 39354. Thanks to David Wagner for the bug report.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345067 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-23 18:38:15 +00:00
Samuel Benzaquen
d8754baf49 Add benchmark for std::set.
Summary:
Benchmarks for construct, find, insert and iterate, with sequential
and random ordered inputs.

It also improves the cartesian product benchmark header to allow for
runtime values to be specified in the product.

Reviewers: EricWF

Subscribers: christof, ldionne, libcxx-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345035 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-23 14:49:27 +00:00
Marshall Clow
9678b5d267 Mark the move construct/move assign tests as unsupported on C++03
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@345001 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-23 05:22:09 +00:00
Marshall Clow
374084fce8 Add tests for match_results copy/move assignment operators. NFC
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@344998 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-23 02:51:26 +00:00
Marshall Clow
268b4d01c2 Remove a 'const' from the synopsis. NFC
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@344997 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-23 02:31:11 +00:00
Marshall Clow
173057e232 Updated the issue notes.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@344989 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-23 01:30:14 +00:00
Marshall Clow
a894ebb441 Add tests for match_results copy/move construction. NFC
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@344988 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-23 01:27:47 +00:00
Marshall Clow
dd10075b58 Added more notes to the issues.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@344975 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-22 23:52:09 +00:00
Marshall Clow
1f63d28c70 Update commnents to reflect the changes for LWG#3127. NFC
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@344953 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-22 20:50:06 +00:00
Marshall Clow
9110b80a63 Update commnents to reflect the changes for LWG#3127. NFC
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@344951 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-22 20:49:50 +00:00
Marshall Clow
3d1d9230d8 Update commnents to reflect the changes for LWG#3122. NFC
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@344950 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-22 20:44:37 +00:00
Billy Robert O'Neal III
0a890c95ca [libcxx] [test] Don't detect Windows' UCRT with TEST_COMPILER_C1XX
The test is trying to avoid saying aligned_alloc on Windows' UCRT, which does not (and can not) implement aligned_alloc. However, it's testing for c1xx, meaning clang on Windows will fail this test when using the UCRT.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@344829 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-20 03:35:45 +00:00