Commit Graph

611 Commits

Author SHA1 Message Date
Eric Fiselier
1425485773 Implement LWG 2936: Path comparison is defined in terms of the generic format
This patch implements path::compare according to the current spec. The
only observable change is the ordering of "/foo" and "foo", which orders
the two paths based on having or not having a root directory (instead
of lexically comparing "/" to "foo").

llvm-svn: 349881
2018-12-21 03:16:30 +00:00
Eric Fiselier
5763cbb426 Mark two filesystem LWG issues as complete - nothing to do
llvm-svn: 349877
2018-12-21 02:17:00 +00:00
Marshall Clow
f60c63c090 Implement P1209 - Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20. Reviewed as https://reviews.llvm.org/D55532
llvm-svn: 349178
2018-12-14 18:49:35 +00:00
Louis Dionne
bb9ca6d0bf [libcxx] Implement P0318: unwrap_ref_decay and unwrap_reference
Summary:
This was voted into C++20 in San Diego. Note that there was a revision
D0318R2 which did include unwrap_reference_t, but we mistakingly voted
P0318R1 into the C++20 Working Draft (which does not include
unwrap_reference_t). This patch implements D0318R2, which is what
we'll end up with in the Working Draft once this mistake has been
fixed.

Reviewers: EricWF, mclow.lists

Subscribers: christof, dexonsmith, libcxx-commits

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

llvm-svn: 348138
2018-12-03 14:03:27 +00:00
Marshall Clow
4d64d7dd64 Implement P0966 - string::reserve should not shrink
llvm-svn: 347789
2018-11-28 18:18:34 +00:00
Marshall Clow
44d247d280 Implement P1085R2 - Should Span be Regular?. This consists entirely of deletions
llvm-svn: 347672
2018-11-27 16:35:41 +00:00
Zhihao Yuan
147b25b4a1 [libc++] Implement P0487R1 - Fixing operator>>(basic_istream&, CharT*)
Summary:
Avoid buffer overflow by replacing the pointer interface with an array reference interface in C++2a.
Tentatively ready on Batavia2018.

 https://wg21.link/lwg2499
 https://wg21.link/p0487

Reviewers: mclow.lists, ldionne, EricWF

Reviewed By: ldionne

Subscribers: libcxx-commits, cfe-commits, christof

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

llvm-svn: 347377
2018-11-21 03:30:10 +00:00
Marshall Clow
422c4295c3 Note that P0899R1 requires no work.
llvm-svn: 347344
2018-11-20 20:38:15 +00:00
Marshall Clow
859bf40761 Mark P0771 as complete; we already did this - I just added tests to be sure
llvm-svn: 347343
2018-11-20 20:37:07 +00:00
Marshall Clow
f54aeed6f4 Mark #2184 as complete; the tests are fine. (I thought that they were wrong before)
llvm-svn: 346805
2018-11-13 22:26:03 +00:00
Louis Dionne
c2078fb1c8 [NFC] Mark LWG3128 and LWG3132 as requiring no work
Those LWG issues were adopted in San Diego and require no work
on our side.

llvm-svn: 346799
2018-11-13 21:13:10 +00:00
Marshall Clow
78d8b5e1cf Remove duplicate entry for issue 3134
llvm-svn: 346772
2018-11-13 18:07:51 +00:00
Marshall Clow
04fc84408b Update status for issue 3122
llvm-svn: 346771
2018-11-13 18:05:10 +00:00
Louis Dionne
77c17e26ea [NFC][libcxx] Mark P1006R1 as complete
llvm-svn: 346767
2018-11-13 17:33:11 +00:00
Marshall Clow
cf355fc373 Implement P0972R0: <chrono> zero(), min(), and max() should be noexcept. Reviewed as https://reviews.llvm.org/D53828
llvm-svn: 346766
2018-11-13 17:22:41 +00:00
Louis Dionne
7a83c5f623 [NFC][libcxx] Mark P1006 as implemented in LLVM 8.0
It was implemented in https://reviews.llvm.org/D53867

llvm-svn: 346765
2018-11-13 17:09:25 +00:00
Marshall Clow
a87fe7a345 Update to-do list with new work from WG21 meeting in San Diego
llvm-svn: 346634
2018-11-12 04:58:00 +00:00
Louis Dionne
7c7cac05ed [NFC] Replace C++1y and C++1z by C++14 and C++17, respectively
llvm-svn: 345762
2018-10-31 18:53:31 +00:00
Louis Dionne
534900b12e [NFC] Mark "Splicing Maps and Sets" as done in LLVM 8.0
llvm-svn: 345759
2018-10-31 18:33:11 +00:00
Louis Dionne
7bf7edec79 [libcxx] Correct link to code review for P1006
llvm-svn: 345658
2018-10-30 21:50:11 +00:00
Marshall Clow
537aae35dd Add link to implementation for P1006R0
llvm-svn: 345653
2018-10-30 21:27:42 +00:00
Marshall Clow
8179e5042f Added Phab link for P0927
llvm-svn: 345526
2018-10-29 19:31:35 +00:00
Marshall Clow
8b85b9b6af Updated the issue notes.
llvm-svn: 344989
2018-10-23 01:30:14 +00:00
Marshall Clow
35d418ee72 Added more notes to the issues.
llvm-svn: 344975
2018-10-22 23:52:09 +00:00
Marshall Clow
b9f72a5a60 Papers and Issues for San Diego
llvm-svn: 343923
2018-10-06 15:07:03 +00:00
Eric Fiselier
0ef540bd51 Correct docs to reference the new libc++ lists.
We recently added libcxx-dev and libcxx-commits mailing lists.
This patch updates the libc++ documentation to correctly reference
the libc++ lists instead of the old Clang ones.

llvm-svn: 342816
2018-09-22 19:49:29 +00:00
Sylvestre Ledru
8e5a0b1f7b add a quick link to libc++abi
llvm-svn: 342625
2018-09-20 07:58:43 +00:00
Sylvestre Ledru
0296eea49b refresh the libc++ homepage
llvm-svn: 342624
2018-09-20 07:57:31 +00:00
Volodymyr Sapsai
8d6ac8f689 Revert "Implement LWG 2221 - No formatted output operator for nullptr."
This reverts r342566 as it causes on bots linker errors like

> Undefined symbols for architecture i386:
>   "std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(std::nullptr_t)", referenced from:

llvm-svn: 342599
2018-09-19 23:31:34 +00:00
Marshall Clow
4a71f9cfcc Implement LWG 2221 - No formatted output operator for nullptr. Reviewed as https://reviews.llvm.org/D44263
llvm-svn: 342566
2018-09-19 18:29:57 +00:00
Marshall Clow
08ebf19e52 Mark LWG#3102 as complete. No code changes, but I updated a test or two
llvm-svn: 342103
2018-09-13 02:23:52 +00:00
Marshall Clow
a4ce437104 Actually mark LWG#2953, don't just say you've done so in r342070
llvm-svn: 342071
2018-09-12 18:53:02 +00:00
Marshall Clow
71f7d7b1c7 mark LWG#2953 as complete. No code changes required, but added a couple of extra tests.
llvm-svn: 342070
2018-09-12 18:51:12 +00:00
Marshall Clow
ebff3123a2 Implement LWG #3017. list splice functions should use addressof
llvm-svn: 342057
2018-09-12 14:46:17 +00:00
Marshall Clow
05ff3d3bf7 Mark P0556 as 'in progress'
llvm-svn: 340752
2018-08-27 16:07:01 +00:00
Marshall Clow
7986a5bdf8 Mark LWG#2260 as complete. We already did the right thing, so I just added tests to ensure that we continue to DTRT.
llvm-svn: 338936
2018-08-03 23:28:48 +00:00
Marshall Clow
07d8ac0ab5 Implement P1023: constexpr comparison operators for std::array
llvm-svn: 338668
2018-08-02 02:11:06 +00:00
Marshall Clow
1f9e03f04d Final bit of P0063 - make sure that aligned_alloc is available when the underlying C library supports it
llvm-svn: 338457
2018-07-31 23:39:12 +00:00
Eric Fiselier
5090559bd4 Correctly mark the Filesystem status as complete.
llvm-svn: 338094
2018-07-27 03:16:02 +00:00
Eric Fiselier
998a5c8831 Implement <filesystem>
This patch implements the <filesystem> header and uses that
to provide <experimental/filesystem>.

Unlike other standard headers, the symbols needed for <filesystem>
have not yet been placed in libc++.so. Instead they live in the
new libc++fs.a library. Users of filesystem are required to link this
library. (Also note that libc++experimental no longer contains the
definition of <experimental/filesystem>, which now requires linking libc++fs).

The reason for keeping <filesystem> out of the dylib for now is that
it's still somewhat experimental, and the possibility of requiring an
ABI breaking change is very real. In the future the symbols will likely
be moved into the dylib, or the dylib will be made to link libc++fs automagically).

Note that moving the symbols out of libc++experimental may break user builds
until they update to -lc++fs. This should be OK, because the experimental
library provides no stability guarantees. However, I plan on looking into
ways we can force libc++experimental to automagically link libc++fs.

In order to use a single implementation and set of tests for <filesystem>, it
has been placed in a special `__fs` namespace. This namespace is inline in
C++17 onward, but not before that. As such implementation is available
in C++11 onward, but no filesystem namespace is present "directly", and
as such name conflicts shouldn't occur in C++11 or C++14.

llvm-svn: 338093
2018-07-27 03:07:09 +00:00
Marshall Clow
8f7da2458e Mark <span> as complete
llvm-svn: 337879
2018-07-25 01:55:25 +00:00
Eric Fiselier
9158bfd32e Implement filesystem_error::what() and improve reporting.
This patch implements the `what()` for filesystem errors. The message
includes the 'what_arg', any paths that were specified, and the
error code message.

Additionally this patch refactors how errors are created, making it easier
to report them correctly.

llvm-svn: 337664
2018-07-23 02:00:52 +00:00
Eric Fiselier
c16998649e [libc++] Implement Directory Entry Caching -- Sort of.
Summary:
This patch implements directory_entry caching *almost* as specified in P0317r1. However, I explicitly chose to deviate from the standard as I'll explain below.

The approach I decided to take is a fully caching one. When `refresh()` is called, the cache is populated by calls to `stat` and `lstat` as needed.
During directory iteration the cache is only populated with the `file_type` as reported by `readdir`.
The cache can be in the following states:

* `_Empty`: There is nothing in the cache (likely due to an error)
* `_IterSymlink`: Created by directory iteration when we walk onto a symlink only the symlink file type is known.
* `_IterNonSymlink`: Created by directory iteration when we walk onto a non-symlink. Both the regular file type and symlink file type are known.
* `_RefreshSymlink` and `_RefreshNonSymlink`: A full cache created by `refresh()`.  This case includes dead symlinks.
* `_RefreshSymlinkUnresolved`: A partial cache created by refresh when we fail to resolve the file pointed to by a symlink (likely due to permissions). Symlink attributes are cached, but attributes about the linked entity are not.

As mentioned, this implementation purposefully deviates from the standard. According to some readings of the specification, and the Windows filesystem implementation, the constructors and modifiers which don't pass an `error_code` must throw when the `directory_entry` points to a entity which doesn't exist. or when attribute resolution fails for another reason. 

@BillyONeal  has proposed a more reasonable set of requirements, where modifiers other than refresh ignore errors. This is the behavior libc++ currently implements, with the expectation some form of the new language will be accepted into the standard.

Some additional semantics which differ from the Windows implementation:

1. `refresh` will not throw when the entry doesn't exist. In this case we can still meet the functions specification, so we don't treat it as an error.
2. We don't clear the path name when a constructor fails via refresh (this will hopefully be changed in the standard as well).

It should be noted that libstdc++'s current implementation has the same behavior as libc++, except for point (2).

If the changes to the specification don't get accepted, we'll be able to make the changes later.

[1] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0317r1.html

Reviewers: mclow.lists, gromer, ldionne, aaron.ballman

Subscribers: BillyONeal, christof, cfe-commits

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

llvm-svn: 337516
2018-07-20 01:22:32 +00:00
Marshall Clow
d8f5b2d612 Fix HTML blunder
llvm-svn: 336381
2018-07-05 17:44:12 +00:00
Marshall Clow
76b26852b6 Implement LWG 2946, 3075 and 3076. Reviewed as https://reviews.llvm.org/D48616
llvm-svn: 336132
2018-07-02 18:41:15 +00:00
Marshall Clow
b6b7a3bb78 Remove P0771, which was not passed in Rapperswil
llvm-svn: 334894
2018-06-16 18:03:29 +00:00
Marshall Clow
e044d1e504 Update the to-do list with motions from Rapperswil.
llvm-svn: 334467
2018-06-12 02:45:30 +00:00
Marshall Clow
50eae5a3e5 Mark more bits of P0433 as complete.
llvm-svn: 333058
2018-05-23 03:22:59 +00:00
Marshall Clow
d23dc0f01e More notes on Rapperswil issues
llvm-svn: 332000
2018-05-10 17:07:38 +00:00
Marshall Clow
23b242f910 Status updates for Rapperswil
llvm-svn: 331661
2018-05-07 18:59:04 +00:00