|
Revision tags: llvmorg-20.1.0, llvmorg-20.1.0-rc3, llvmorg-20.1.0-rc2, llvmorg-20.1.0-rc1, llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4, llvmorg-19.1.3, llvmorg-19.1.2, llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4, llvmorg-19.1.0-rc3, llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1, llvmorg-20-init, llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2, llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7, llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, llvmorg-15.0.2, llvmorg-15.0.1, llvmorg-15.0.0, llvmorg-15.0.0-rc3, llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init |
|
| #
3ee9a50a |
| 30-Jun-2022 |
Nikolas Klauser <[email protected]> |
[libc++] Implement P0618R0 (Deprecating <codecvt>)
Reviewed By: ldionne, #libc
Spies: cfe-commits, llvm-commits, libcxx-commits
Differential Revision: https://reviews.llvm.org/D127313
|
| #
de4a57cb |
| 27-Jun-2022 |
Louis Dionne <[email protected]> |
[libc++] Re-add transitive includes that had been removed since LLVM 14
This commit re-adds transitive includes that had been removed by 4cd04d1687f1, c36870c8e79c, a83f4b9cda57, 1458458b558d, 2e2f3
[libc++] Re-add transitive includes that had been removed since LLVM 14
This commit re-adds transitive includes that had been removed by 4cd04d1687f1, c36870c8e79c, a83f4b9cda57, 1458458b558d, 2e2f3158c604, and 489637e66dd3. This should cover almost all the includes that had been removed since LLVM 14 and that would contribute to breaking user code when releasing LLVM 15.
It is possible to disable the inclusion of these headers by defining _LIBCPP_REMOVE_TRANSITIVE_INCLUDES. The intent is that vendors will enable that macro and start fixing downstream issues immediately. We can then remove the macro (and the transitive includes) by default in a future release. That way, we will break users only once by removing transitive includes in bulk instead of doing it bit by bit a every release, which is more disruptive for users.
Note 1: The set of headers to re-add was found by re-generating the transitive include test on a checkout of release/14.x, which provided the list of all transitive includes we used to provide.
Note 2: Several includes of <vector>, <optional>, <array> and <unordered_map> have been added in this commit. These transitive inclusions were added when we implemented boyer_moore_searcher in <functional>.
Note 3: This is a best effort patch to try and resolve downstream breakage caused since branching LLVM 14. I wasn't able to perfectly mirror transitive includes in LLVM 14 for a few headers, so I added a release note explaining it. To summarize, adding boyer_moore_searcher created a bunch of circular dependencies, so we have to break backwards compatibility in a few cases.
Differential Revision: https://reviews.llvm.org/D128661
show more ...
|
|
Revision tags: llvmorg-14.0.6 |
|
| #
23d6cde1 |
| 20-Jun-2022 |
Louis Dionne <[email protected]> |
[libc++] Add a test to pin down the set of transitive public includes
A situation that happens fairly often in libc++ is that we remove some transitive includes in a header (either purposefully or n
[libc++] Add a test to pin down the set of transitive public includes
A situation that happens fairly often in libc++ is that we remove some transitive includes in a header (either purposefully or not) and that ends up breaking users. Of course, we want to be able to remove our transitive includes, however it's also good to have a grip on that to know which commit changed what and when. Furthermore, it's good to accumulate include removals for a couple of releases to avoid breaking users at every release for this reason.
This commit adds a test that should break whenever we remove an include. Hence, it should allow us to track which headers include which other headers transitively, giving us a traceable way to remove headers.
Differential Revision: https://reviews.llvm.org/D128236
show more ...
|
| #
4cd04d16 |
| 13-Jun-2022 |
Mark de Wever <[email protected]> |
[libc++] Removes unneeded <iterator> includes.
Reviewed By: #libc, philnik
Differential Revision: https://reviews.llvm.org/D127675
|
| #
3cd4531b |
| 10-Jun-2022 |
Nikolas Klauser <[email protected]> |
[libc++] Granularize <iterator> includes
Reviewed By: ldionne, #libc
Spies: libcxx-commits, wenlei
Differential Revision: https://reviews.llvm.org/D127445
|
|
Revision tags: llvmorg-14.0.5 |
|
| #
976f3705 |
| 06-Jun-2022 |
Nikolas Klauser <[email protected]> |
[libc++] Granularize __string
Reviewed By: ldionne, #libc
Spies: libcxx-commits, mgorny
Differential Revision: https://reviews.llvm.org/D127156
|
|
Revision tags: llvmorg-14.0.4, llvmorg-14.0.3, llvmorg-14.0.2, llvmorg-14.0.1, llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2, llvmorg-14.0.0-rc1, llvmorg-15-init, llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2, llvmorg-13.0.1-rc1, llvmorg-13.0.0, llvmorg-13.0.0-rc4, llvmorg-13.0.0-rc3, llvmorg-13.0.0-rc2, llvmorg-13.0.0-rc1, llvmorg-14-init, llvmorg-12.0.1, llvmorg-12.0.1-rc4, llvmorg-12.0.1-rc3, llvmorg-12.0.1-rc2 |
|
| #
2ae52326 |
| 08-Jun-2021 |
Louis Dionne <[email protected]> |
[libc++] Towards a simpler extern template story in libc++
The flexibility around extern template instantiation declarations in libc++ result in a very complicated model, especially when support for
[libc++] Towards a simpler extern template story in libc++
The flexibility around extern template instantiation declarations in libc++ result in a very complicated model, especially when support for slightly different configurations (like the debug mode or assertions in the dylib) are taken into account. That results in unexpected bugs like http://llvm.org/PR50534 (and there have been multiple similar bugs in the past, notably around the debug mode).
This patch gets rid of the _LIBCPP_DISABLE_EXTERN_TEMPLATE knob, which I don't think is fundamental. Indeed, the motivation for that knob was to avoid taking a dependency on the library, however that can be done better by linking against the static library instead. And in fact, some parts of the headers will always depend on things defined in the library, which defeats the original goal of _LIBCPP_DISABLE_EXTERN_TEMPLATE.
Differential Revision: https://reviews.llvm.org/D103960
show more ...
|
| #
f3966eaf |
| 01-Apr-2022 |
Louis Dionne <[email protected]> |
[libc++] Make the Debug mode a configuration-time only option
The debug mode has been broken pretty much ever since it was shipped because it was possible to enable the debug mode in user code witho
[libc++] Make the Debug mode a configuration-time only option
The debug mode has been broken pretty much ever since it was shipped because it was possible to enable the debug mode in user code without actually enabling it in the dylib, leading to ODR violations that caused various kinds of failures.
This commit makes the debug mode a knob that is configured when building the library and which can't be changed afterwards. This is less flexible for users, however it will actually work as intended and it will allow us, in the future, to add various kinds of checks that do not assume the same ABI as the normal library. Furthermore, this will make the debug mode more robust, which means that vendors might be more tempted to support it properly, which hasn't been the case with the current debug mode.
This patch shouldn't break any user code, except folks who are building against a library that doesn't have the debug mode enabled and who try to enable the debug mode in their code. Such users will get a compile-time error explaining that this configuration isn't supported anymore.
In the future, we should further increase the granularity of the debug mode checks so that we can cherry-pick which checks to enable, like we do for unspecified behavior randomization.
Differential Revision: https://reviews.llvm.org/D122941
show more ...
|
|
Revision tags: llvmorg-12.0.1-rc1 |
|
| #
b86771a2 |
| 22-May-2021 |
Sam Clegg <[email protected]> |
[libc++] Minor emscripten changes from downstream
Differential Revision: https://reviews.llvm.org/D126583
|
| #
ab07d06e |
| 21-Apr-2022 |
David Spickett <[email protected]> |
[libcxx] Reject month 0 in get_date/__get_month
[libcxx] Reject month 0 in get_date/__get_month
This fixes #47663.
Months in dates should be >= 1 and <= 12. We parse up to two digits then minus on
[libcxx] Reject month 0 in get_date/__get_month
[libcxx] Reject month 0 in get_date/__get_month
This fixes #47663.
Months in dates should be >= 1 and <= 12. We parse up to two digits then minus one, because we want to store this as "months since January" (0-11).
However we didn't check that the result of that was not -1. For example if you had (MM/DD/YYYY) 00/21/2022.
Added tests for: * Failing if month is 0 * Failing if month is 13 * Allowing a leading zero in month e.g. "01"
Note that libc++ and libstdc++ return different values on parsing failure, and MSVC STL returns end of stream instead.
Handle the first two by checking for defines, MSVC STL expects these tests to fail for other reasons already: https://github.com/microsoft/STL/blob/main/tests/libcxx/expected_results.txt#L372 so not handling that case here.
Reviewed By: #libc, Mordante
Differential Revision: https://reviews.llvm.org/D124175
show more ...
|
| #
385cc25a |
| 25-Mar-2022 |
Louis Dionne <[email protected]> |
[libc++] Ensure that all public C++ headers include <__assert>
This patch changes the requirement for getting the declaration of the assertion handler from including <__assert> to including any publ
[libc++] Ensure that all public C++ headers include <__assert>
This patch changes the requirement for getting the declaration of the assertion handler from including <__assert> to including any public C++ header of the library. Note that C compatibility headers are excluded because we don't implement all the C headers ourselves -- some of them are taken straight from the C library, like assert.h.
It also adds a generated test to check it. Furthermore, this new generated test is designed in a way that will make it possible to replace almost all the existing test-generation scripts with this system in upcoming patches.
Differential Revision: https://reviews.llvm.org/D122506
show more ...
|
| #
01df6751 |
| 08-Mar-2022 |
Nikolas Klauser <[email protected]> |
[libc++] Enable modernize-loop-convert
Reviewed By: ldionne, Mordante, #libc
Spies: var-const, aheejin, libcxx-commits
Differential Revision: https://reviews.llvm.org/D121216
|
| #
f87aa19b |
| 14-Feb-2022 |
Louis Dionne <[email protected]> |
[libc++] Move everything related solely to _LIBCPP_ASSERT to its own file
This is the first step towards disentangling the debug mode and assertions in libc++. This patch doesn't make any functional
[libc++] Move everything related solely to _LIBCPP_ASSERT to its own file
This is the first step towards disentangling the debug mode and assertions in libc++. This patch doesn't make any functional change: it simply moves _LIBCPP_ASSERT-related stuff to its own file so as to make it clear that libc++ assertions and the debug mode are different things. Future patches will make it possible to enable assertions without enabling the debug mode.
Differential Revision: https://reviews.llvm.org/D119769
show more ...
|
| #
2e2f3158 |
| 15-Feb-2022 |
Nikolas Klauser <[email protected]> |
[libc++] Granularize algorithm includes
Reviewed By: Mordante, ldionne, Quuxplusone, #libc, #libc_abi
Spies: #libc_vendors, libcxx-commits, miyuki
Differential Revision: https://reviews.llvm.org/D
[libc++] Granularize algorithm includes
Reviewed By: Mordante, ldionne, Quuxplusone, #libc, #libc_abi
Spies: #libc_vendors, libcxx-commits, miyuki
Differential Revision: https://reviews.llvm.org/D119667
show more ...
|
| #
a7c2a628 |
| 14-Feb-2022 |
Nikolas Klauser <[email protected]> |
[libc++] Guard warning pragmas
This makes the GCC output even cleaner!
Reviewed By: ldionne, #libc
Spies: mstorsjo, Quuxplusone, Mordante, libcxx-commits
Differential Revision: https://reviews.ll
[libc++] Guard warning pragmas
This makes the GCC output even cleaner!
Reviewed By: ldionne, #libc
Spies: mstorsjo, Quuxplusone, Mordante, libcxx-commits
Differential Revision: https://reviews.llvm.org/D119295
show more ...
|
| #
fa6b9e40 |
| 02-Feb-2022 |
Arthur O'Dwyer <[email protected]> |
[libc++] Normalize all our '#pragma GCC system_header', and regression-test.
Now we'll notice if a header forgets to include this magic phrase.
Differential Revision: https://reviews.llvm.org/D1188
[libc++] Normalize all our '#pragma GCC system_header', and regression-test.
Now we'll notice if a header forgets to include this magic phrase.
Differential Revision: https://reviews.llvm.org/D118800
show more ...
|
| #
1dbe32dd |
| 18-Jan-2022 |
Alex Brachet <[email protected]> |
[libc++] Use reserved identifier for template parameter
`T` is not a valid identifier for libc++ to use, use `_Tp` instead. Caught from D116957
Reviewed By: Quuxplusone
Differential Revision: http
[libc++] Use reserved identifier for template parameter
`T` is not a valid identifier for libc++ to use, use `_Tp` instead. Caught from D116957
Reviewed By: Quuxplusone
Differential Revision: https://reviews.llvm.org/D117582
show more ...
|
| #
eb8650a7 |
| 17-Nov-2021 |
Louis Dionne <[email protected]> |
[runtimes][NFC] Remove filenames at the top of the license notice
We've stopped doing it in libc++ for a while now because these names would end up rotting as we move things around and copy/paste st
[runtimes][NFC] Remove filenames at the top of the license notice
We've stopped doing it in libc++ for a while now because these names would end up rotting as we move things around and copy/paste stuff. This cleans up all the existing files so as to stop the spreading as people copy-paste headers around.
show more ...
|
| #
faa019c0 |
| 10-Nov-2021 |
MarcoFalke <[email protected]> |
[libc++] Fix segmentation fault in __do_put_integral
6 chars are not sufficient to represent all formats for 64 bit integers.
This was accidentally introduced in commit b889cbf36635a302f5b77560f176
[libc++] Fix segmentation fault in __do_put_integral
6 chars are not sufficient to represent all formats for 64 bit integers.
This was accidentally introduced in commit b889cbf36635a302f5b77560f1769178f196c2c7 (https://reviews.llvm.org/D112830).
This causes failures in downstream projects, for example:
* https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=40817 * https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=40841
Differential Revision: https://reviews.llvm.org/D113600
show more ...
|
| #
a4ba7805 |
| 29-Oct-2021 |
Louis Dionne <[email protected]> |
[libc++] Enable -Wformat-nonliteral when building libc++
Using user-provided data as a format string is a well known source of security vulnerabilities. For this reason, it is a good idea to compile
[libc++] Enable -Wformat-nonliteral when building libc++
Using user-provided data as a format string is a well known source of security vulnerabilities. For this reason, it is a good idea to compile our code with -Wformat-nonliteral, which basically warns if a non-constant string is used as a format specifier. This is the compiler’s best signal that a format string call may be insecure.
I audited the code after adding the warning and made sure that the few places where we used a non-literal string as a format string were not potential security issues. I either disabled the warning locally for those instances or fixed the warning by using a literal. The idea is that after we add the warning to the build, any new use of a non-literal string in a format string will trigger a diagnostic, and we can either get rid of it or disable the warning locally, which is a way of acknowledging that it has been audited.
I also looked into enabling it in the test suite, which would perhaps allow finding additional instances of it in our headers, however that is not possible at the moment because Clang doesn't support putting __attribute__((__format__(...))) on variadic templates, which would be needed.
rdar://84571685
Differential Revision: https://reviews.llvm.org/D112927
show more ...
|
| #
41481b7d |
| 16-Jul-2021 |
Daniel McIntosh <[email protected]> |
[libcxx][NFC] tidy up money_get::__do_get's sign parsing
Same logic, but much easier to read this way
Reviewed By: ldionne, #libc, Mordante
Differential Revision: https://reviews.llvm.org/D112958
|
| #
b889cbf3 |
| 29-Oct-2021 |
Louis Dionne <[email protected]> |
[libc++] Refactor num_put::do_put to reduce duplication
I was going to make a change in that area of the code and I noticed that we basically duplicated the same code 5 times to handle integral type
[libc++] Refactor num_put::do_put to reduce duplication
I was going to make a change in that area of the code and I noticed that we basically duplicated the same code 5 times to handle integral types and floating point types. This commit simply pulls the duplication into a function.
Differential Revision: https://reviews.llvm.org/D112830
show more ...
|
| #
f4c1258d |
| 23-Aug-2021 |
Louis Dionne <[email protected]> |
[libc++] Add an option to disable wide character support in libc++
Some embedded platforms do not wish to support the C library functionality for handling wchar_t because they have no use for it. It
[libc++] Add an option to disable wide character support in libc++
Some embedded platforms do not wish to support the C library functionality for handling wchar_t because they have no use for it. It makes sense for libc++ to work properly on those platforms, so this commit adds a carve-out of functionality for wchar_t.
Unfortunately, unlike some other carve-outs (e.g. random device), this patch touches several parts of the library. However, despite the wide impact of this patch, I still think it is important to support this configuration since it makes it much simpler to port libc++ to some embedded platforms.
Differential Revision: https://reviews.llvm.org/D111265
show more ...
|
| #
87dd5198 |
| 24-Aug-2021 |
Louis Dionne <[email protected]> |
[libc++] Remove support for CloudABI, which has been abandoned
Based on https://github.com/NuxiNL/cloudlibc, it appears that the CloudABI project has been abandoned. This patch removes a bunch of Cl
[libc++] Remove support for CloudABI, which has been abandoned
Based on https://github.com/NuxiNL/cloudlibc, it appears that the CloudABI project has been abandoned. This patch removes a bunch of CloudABI specific logic that had been added to support that platform.
Note that some knobs like LIBCXX_ENABLE_STDIN and LIBCXX_ENABLE_STDOUT coud be useful in their own right, however those are currently broken. If we want to re-add such knobs in the future, we can do it like we've done it for localization & friends so that we can officially support that configuration.
Differential Revision: https://reviews.llvm.org/D108637
show more ...
|
| #
363a8a05 |
| 29-Jul-2021 |
Jason Liu <[email protected]> |
[libc++] money_get::do_get() set failbit and eofbit if iterator begin equals end
Summary: Currently, if we pass in the same iterator for begin and end, the long double version of do_get would throw
[libc++] money_get::do_get() set failbit and eofbit if iterator begin equals end
Summary: Currently, if we pass in the same iterator for begin and end, the long double version of do_get would throw a runtime error.
However, according to standard (https://eel.is/c++draft/locale.money.get#virtuals-1), we should set the failbit and eofbit when no more characters are available.
Differential Revision: https://reviews.llvm.org/D100510
show more ...
|