5647 Commits

Author SHA1 Message Date
Eric Fiselier
87cf92d9cb Make rvalue metaprogramming traits work in C++03.
The next step is to get move and forward working in C++03.

llvm-svn: 364053
2019-06-21 14:31:34 +00:00
Eric Fiselier
5b4cc84b87 Remove even more dead code.
llvm-svn: 364050
2019-06-21 14:09:32 +00:00
Eric Fiselier
395c7330e4 Assume __is_final, __is_base_of, and friends.
All the compilers we support provide these builtins. We don't
need to do a configuration dance anymore.

This patch also cleans up some dead or almost dead
C++11 feature detection macros.

llvm-svn: 364047
2019-06-21 13:56:13 +00:00
Eric Fiselier
8d30a6e40c Remove dead config now that C++03 requires Clang.
llvm-svn: 364031
2019-06-21 11:32:43 +00:00
Mikhail Maltsev
cfdc7f0d7e [libc++] Avoid using timespec when it might not be available
Summary:
The type timespec is unconditionally used in __threading_support.
Since the C library is only required to provide it in C11, this might
cause problems for platforms with external thread porting layer (i.e.
when _LIBCPP_HAS_THREAD_API_EXTERNAL is defined) with pre-C11
C libraries.

In our downstream port of libc++ we used to provide a definition of
timespec in __external_threading, but this solution is not ideal
because timespec is not a reserved name.

This patch renames timespec into __libcpp_timespec_t in the
thread-related parts of libc++. For all cases except external
threading this type is an alias for ::timespec (and no functional
changes are intended).

In case of external threading it is expected that the
__external_threading header will either provide a similar typedef (if
timespec is available in the vendor's C library) or provide a
definition of __libcpp_timespec_t compatible with POSIX timespec.

Reviewers: ldionne, mclow.lists, EricWF

Reviewed By: ldionne

Subscribers: dexonsmith, libcxx-commits, christof, carwil

Tags: #libc

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

llvm-svn: 364012
2019-06-21 08:33:47 +00:00
Zhihao Yuan
4513f0f022 [libc++] Recommit r363692 to implement P0608R3
Re-apply the change which was reverted in r363764 as-is after
breakages being resolved.  Thanks Eric Fiselier for working
hard on this.

See also: https://bugs.llvm.org/show_bug.cgi?id=42330

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

llvm-svn: 363993
2019-06-20 22:09:40 +00:00
Louis Dionne
f2f7d72f00 [libc++] Take 2: Implement CTAD for map and multimap
This is a re-application of r362986 (which was reverted in r363688) with fixes
for the issue that caused it to be reverted.

Thanks to Arthur O'Dwyer for the patch.

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

llvm-svn: 363968
2019-06-20 19:32:00 +00:00
Xing Xue
ab4bcd844a AIX system headers need stdint.h and inttypes.h to be re-enterable
Summary:
AIX system headers need stdint.h and inttypes.h to be re-enterable when macro _STD_TYPES_T is defined so that limit macro definitions such as UINT32_MAX can be found. This patch attempts to allow that on AIX.

Reviewers: hubert.reinterpretcast, jasonliu, mclow.lists, EricWF

Reviewed by: hubert.reinterpretcast, mclow.lists

Subscribers: jfb, jsji, christof, cfe-commits, libcxx-commits, llvm-commits

Tags: #LLVM, #clang, #libc++

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

llvm-svn: 363939
2019-06-20 15:36:32 +00:00
Louis Dionne
205ead8c16 [NFC][libc++] Remove stray semi-colon after function definition
llvm-svn: 363835
2019-06-19 16:33:28 +00:00
Marshall Clow
d72ebeef2c Mark papers P1458, P1459, P1462 and P1464 as complete. No changed needed to either the library or the tests.
llvm-svn: 363834
2019-06-19 16:32:07 +00:00
Zhihao Yuan
3f0ae625eb [libc++] Revert r363692 which implements P0608R3
The change caused a large number of compiler failures in
Google's codebase.  People need time to evaluate the impact.

llvm-svn: 363764
2019-06-19 07:11:08 +00:00
Marshall Clow
2184374d94 Disable the 'nextafter' portions of these tests on PPC when using 128-bit doubles because the 'nextafter' call doesn't work right. Reviewed as https://reviews.llvm.org/D62384. Thanks to Xing Xue for the patch, and Hubert for the explanation.
llvm-svn: 363740
2019-06-18 21:20:02 +00:00
Eric Fiselier
5c739665a8 Remove GCC C++03 fallbacks for decltype and static_assert.
This means libc++ no longer needs to write extra braces in
static asserts: Ex `static_assert((is_same_v<T, V>), "msg")`.

llvm-svn: 363738
2019-06-18 20:50:25 +00:00
Eric Fiselier
a8aa58fb3d Reconfigure docker builders to be more modular.
And other various cleanups to the configuration.

llvm-svn: 363722
2019-06-18 19:31:38 +00:00
Marshall Clow
8dc6840f1c Fix the floating point version of midpoint. It wasn't constexpr, among other things. Add more tests. As a drive-by, the LCD implementation had a class named '__abs' which did a 'absolute value to a common-type' conversion. Rename that to be '__ct_abs'.
llvm-svn: 363714
2019-06-18 18:13:54 +00:00
Zhihao Yuan
c74fc6d5f9 [libc++] Implement P0608R3 - A sane variant converting constructor
Summary:
Prefer user-defined conversions over narrowing conversions and conversions to bool.

References:
 http://wg21.link/p0608

Reviewers: EricWF, mpark, mclow.lists

Reviewed By: mclow.lists

Subscribers: zoecarver, ldionne, libcxx-commits, cfe-commits, christof

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

llvm-svn: 363692
2019-06-18 15:26:50 +00:00
Louis Dionne
91185b69d1 [libc++] Re-apply XFAIL to is_base_of test that was inadvertently reverted
llvm-svn: 363689
2019-06-18 15:01:59 +00:00
Louis Dionne
1fab01f92b [libc++] Revert the addition of map/multimap CTAD
This was found to be broken on Clang trunk. This is a revert of the
following commits (the subsequent commits added XFAILs to the tests
that were missing from the original submission):

    r362986: Implement deduction guides for map/multimap.
    r363014: Add some XFAILs
    r363097: Add more XFAILs
    r363197: Add even more XFAILs

llvm-svn: 363688
2019-06-18 14:40:15 +00:00
Louis Dionne
15722626e3 [NFC] Assign a couple of LWG issues to myself
llvm-svn: 363605
2019-06-17 19:40:09 +00:00
Louis Dionne
be8c669af0 [libc++] Update ABI list for ABI v2
I forgot to add symbols for filesystem.

llvm-svn: 363603
2019-06-17 19:37:26 +00:00
Marshall Clow
546006b64e Update status of issue 3209
llvm-svn: 363594
2019-06-17 18:25:52 +00:00
Marshall Clow
2e550cabea Add tests for LWG 3206. NFC
llvm-svn: 363589
2019-06-17 18:06:30 +00:00
Marshall Clow
a8dcd47688 Update the meeting page with papers/issues that are ready for Cologne
llvm-svn: 363575
2019-06-17 16:17:56 +00:00
Marshall Clow
2dda1ff038 Fix a '>= 0' test on unsigned that I inadvertantly introduced. Now correctly '!= 0'. Thanks to Arthur for the catch
llvm-svn: 363557
2019-06-17 13:41:14 +00:00
Eric Fiselier
186ca60e51 add header to help with template testing
llvm-svn: 363503
2019-06-15 21:16:57 +00:00
Eric Fiselier
2ade4f6f72 attempt to unbreak buildbots
llvm-svn: 363442
2019-06-14 19:31:17 +00:00
Louis Dionne
0feebef501 [libcxx] Add XFAIL for facet test when back-deploying to older macOS
llvm-svn: 363405
2019-06-14 14:40:38 +00:00
Mikhail Maltsev
411c630bae [libc++] Keep __regex_word in sync with ctype_base
Summary:
The class ctype_base in the header <__locale> contains masks for
character classification functions, which are kept in sync with
platform's C library, hence it contains many special cases.
The value of the bit mask __regex_word in the header <regex> must not
clash with those bit masks.

Currently the default case (i.e. unknown platform/C library) is
handled incorrectly: the __regex_word clashes with ctype_base::punct.

To avoid replicating the whole list of platforms in <regex> this patch
defines __regex_word in <__locale>, so that it is always kept in sync
with other masks.

Reviewers: ldionne, mclow.lists, EricWF

Reviewed By: ldionne

Subscribers: krytarowski, christof, dexonsmith, pbarrio, simon_tatham, libcxx-commits

Tags: #libc

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

llvm-svn: 363363
2019-06-14 09:04:16 +00:00
Thomas Anderson
2ce370c957 [libc++] Fix build with gcc 4.8
gcc 4.8.4 (but not 5.4.0 or 7.3.0) has trouble initializing errc with {}, giving
the error in [1]. This CL switches to explicitly using errc(0), which gcc 4.8
accepts.

[1] https://bugs.chromium.org/p/chromium/issues/detail?id=973723

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

llvm-svn: 363333
2019-06-13 22:27:24 +00:00
Louis Dionne
64c1d456c1 [libc++] Add missing #include in <cwchar> tests
Thanks to Mikhail Maltsev for the patch.
Differential Revision: https://reviews.llvm.org/D63289

llvm-svn: 363290
2019-06-13 18:24:28 +00:00
Eric Fiselier
5de7cacf07 Make GCC in C++03 Unsupported
Summary:
This patch make G++03 explicitly unsupported with libc++, as discussed on the mailing lists.


Below is the rational for this decision.
----------------------------------------------------------------------------------------------------

libc++ claims to support GCC with C++03 ("G++03"), and this is a problem for our users.

Our C++03 users are all using Clang. They must be.  Less than 9% of the C++03 tests pass with GCC [1][2]. No non-trivial C++ program could work.

Attempting to support G++03 impacts our QoI considerably. Unlike Clang, G++03 offers almost no C++11 extensions. If we could remove all the fallbacks for G++03, it would mean libc++ could::

* Improve Correctness:

Every `#ifdef _LIBCPP_HAS_NO_<C++11-feature>` is a bug manifest. It exists to admit for deviant semantics.

* Achieve ABI stability between C++03 and C++11

Differences between our C++03 and C++Rest branches contain ABI bugs. For example `std::nullptr_t` and `std::function::operator()(...)` are currently incompatible between C++11 and C++03, but could be fixed.

* Decrease Compile Times and Memory Usage:

Writing efficient SFINAE requires C++11. Using alias templates, libc++ could reduce the number of instantiations it produces substantially.

* Decrease Binary Size

Similar to the last point, G++03 forces metaprogramming techniques that emit more debug information [3] [4]. Compared to libstdc++, debug information size increases of +10% are not uncommon.

Reviewers: ldionne, mclow.lists, EricWF

Reviewed By: ldionne, EricWF

Subscribers: zoecarver, aprantl, dexonsmith, arphaman, libcxx-commits, #libc

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

llvm-svn: 363219
2019-06-13 00:37:25 +00:00
Louis Dionne
c45f592b98 [libcxx] XFAIL set/multiset CTAD tests on Apple Clang 10
llvm-svn: 363209
2019-06-12 22:01:05 +00:00
Louis Dionne
782fff1bf8 [libcxx] XFAIL some CTAD tests on AppleClang 10
AppleClang 10 doesn't contain some changes that are required for this
test to give the right error message.

llvm-svn: 363197
2019-06-12 20:12:44 +00:00
Eric Fiselier
14d4869209 Apply [[nodebug]] to typedefs throughout the STL.
When applied to a typedef or alias template, the [[nodebug]] attribute
makes the typedef transparent to the debugger, so instead of seeing
`std::__function::__alloc_func<remove_reference<void(&)()>::type,
allocator<remove_reference<void(&)()>, void()>::_Target` you see
`void(&)()` as the type of the variable in your debugger.

Removing all this SFINAE noise from debug info has huge binary size
wins, in addition to improving the readability.

For now this change is on by default. Users can override it by
specifying -D_LIBCPP_NODEBUG_TYPE=

llvm-svn: 363117
2019-06-12 02:03:31 +00:00
Eric Fiselier
0e9b1d2a20 Move libc++ specific tests for std::function out of the std directory
llvm-svn: 363111
2019-06-11 22:59:53 +00:00
Eric Fiselier
4959542657 Add documentation and tests for Clangs C++11 extensions in C++03.
As we gear up to drop support for GCC in C++03, we should make clear
what our C++03 mode is, the C++11 extensions it provides,
and the C++11 extensions it depends on.

The section of this document discussing user-facing extensions has
been left blank while the community discusses new directions. For now
it's just a warning to users.

Additionally, the document contains examples of how these extensions
should be used and why. For example, using alias templates over class
templates.

llvm-svn: 363110
2019-06-11 22:53:49 +00:00
Louis Dionne
c06943b67d [libcxx] Mark CTAD tests for set and multiset as unsupported on older Apple Clangs
Those fail on Green Dragon.

llvm-svn: 363107
2019-06-11 22:36:20 +00:00
Marshall Clow
903d3db593 Mark CTAD fail tests for set/multiset as XFAIL for older compilers that give different error messages
llvm-svn: 363099
2019-06-11 20:35:19 +00:00
Marshall Clow
1dc3c9aa8f XFAIL a couple of tests on apple-clang-9.1, which is a compiler that I didn't know existed
llvm-svn: 363097
2019-06-11 20:14:07 +00:00
Eric Fiselier
5d6626c758 Check in test that demonstrates ABI break for std::function.
Our C++03 and C++11 implementations of function are not ABI
compatible. I've added a "test" that demonstrates this.

llvm-svn: 363092
2019-06-11 18:41:47 +00:00
Louis Dionne
e20865c387 [libc++] Implement deduction guides for <set>
This is part of C++17's P0433.

Thanks to Arthur O'Dwyer for the patch.

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

llvm-svn: 363090
2019-06-11 18:21:08 +00:00
Louis Dionne
405570dc7a [libcxx] Make std::tuple<> trivially constructible
Summary:
This is not mandated by the Standard, but it's nonetheless a nice
property to have, especially since it's so easy to implement. It
also shrinks our bug list!

PR41714

Reviewers: mclow.lists, EricWF

Subscribers: christof, jkorous, dexonsmith, libcxx-commits

Tags: #libc

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

llvm-svn: 363075
2019-06-11 15:02:10 +00:00
Louis Dionne
776acf225b [libcxx] Slightly improved policy for handling experimental features
Summary:
Following the discussion on the libcxx-dev mailing list
(http://lists.llvm.org/pipermail/libcxx-dev/2019-May/000358.html),
this implements the new policy for handling experimental features and
their deprecation. We basically add a deprecation warning for
std::experimental::filesystem, and we remove a bunch of <experimental/*>
headers that were now empty.

Reviewers: mclow.lists, EricWF

Subscribers: mgorny, christof, jkorous, dexonsmith, arphaman, libcxx-commits, jfb

Tags: #libc

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

llvm-svn: 363072
2019-06-11 14:48:40 +00:00
Marshall Clow
2efd2957ef Add a test for is_base_of and incomplete types. Because this trait uses a compiler intrinsic which was broken in many clangs, have lots of XFAILs.
llvm-svn: 363029
2019-06-11 03:38:29 +00:00
Marshall Clow
d40807c6bb XFAIL a couple of CTAD tests on clang-6; it gives different error messages than clang 7/8/9
llvm-svn: 363014
2019-06-11 00:23:50 +00:00
Marshall Clow
141c2b768d Recommit r362649, which was reverted in r262680 because of bugs in std::to_chars (which have now been fixed). Speedup to_string and to_wstring for integers using stack buffer and SSO
llvm-svn: 363003
2019-06-10 23:20:01 +00:00
Marshall Clow
edfe8525de Implement deduction guides for map/multimap. Reviewed as https://reviews.llvm.org/D58587. Thanks to Quuxplusone for the submission.
llvm-svn: 362986
2019-06-10 21:28:23 +00:00
Zhihao Yuan
6bc4a7685e [libc++] Fix leading zeros in std::to_chars
Summary:
It is a bugfix proposal for https://bugs.llvm.org/show_bug.cgi?id=42166.

`std::to_chars` appends leading zeros if input 64-bit value has 9, 10 or 11 digits.
According to documentation `std::to_chars` must not append leading zeros:
https://en.cppreference.com/w/cpp/utility/to_chars

Changeset should not affect `std::to_chars` performance:
http://quick-bench.com/CEpRs14xxA9WLvkXFtaJ3TWOVAg

Unit test that `std::from_chars` supports compatibility for both `std::to_chars` outputs (previous and fixed one) already exists:
1f60111b59/test/std/utilities/charconv/charconv.from.chars/integral.pass.cpp (L63)

Reviewers: lichray, mclow.lists, ldionne, EricWF

Reviewed By: lichray, mclow.lists

Subscribers: zoecarver, christof, dexonsmith, libcxx-commits

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

llvm-svn: 362967
2019-06-10 17:11:46 +00:00
Eric Fiselier
99dfd7084d update debugging docs to be less out of date
llvm-svn: 362866
2019-06-08 04:59:41 +00:00
Eric Fiselier
d63dd874ec Substantially reduce instantiations and debug size of std::function
std::function uses a standard allocator to manage its memory, however
standard allocators are templates and using them correctly requires
a stupid amount of instantiations. This leads to a substantial increase
in debug info and object sizes.

This patch addresses the issue by dropping the allocator when possible
and using raw new and delete to get memory.

This change decreases the object file size for the test func.wrap.func.con/F.pass.cpp by 33% and the final binary by 29% (when compiled with -g -ggnu-pubnames -gpubnames).

It also roughly halfs the number of entries in the pubnames and pubtype
sections.

llvm-svn: 362865
2019-06-08 01:31:19 +00:00