11120 Commits

Author SHA1 Message Date
Eric
c66d5f57ce
Attempt entire rewrite of buildkite pipeline using anchors. (#71624)
This uses YAML anchors to deduplicate a lot of the pipeline LOC.

This makes it a lot easier to navigate through the file and to make modifications.
2023-11-13 17:06:25 -05:00
Nikolas Klauser
8b73be5f57 [libc++] Readd _LIBCPP_CONSTINIT
This isn't used by libc++, but it's still used in libc++abi.
2023-11-13 13:07:32 +01:00
Nikolas Klauser
9e618e5ed4 [libc++][NFC] Remove a few unused macros from <__config> 2023-11-13 12:57:59 +01:00
Louis Dionne
e734bc53de
[libc++] Remove _LIBCPP_HAS_NO_FGETPOS_FSETPOS (#72073)
Instead of using individual macros to turn off missing C library
features, we use the using_if_exists attribute now. This patch removes
the _LIBCPP_HAS_NO_FGETPOS_FSETPOS macro used to workaround missing
fgetpos and fsetpos on older versions of Android -- using_if_exists
should take care of those in the headers and we should add appropriate
XFAILs to the tests instead of using TEST_HAS_NO_FGETPOS_FSETPOS.
2023-11-13 09:43:25 +01:00
Duo Wang
d05bada592
[libcxx][test] std::array::iterator are not pointers by C++ standard (#70729)
This is to modify a list of libcxx tests written under the assumption
that iterators for std::array, std::string_view, and std::string are
pointers. The motivation for this PR is to make the tests more universal
and potentially being used to test other C++ standard library
implementations, for example
[microsoft/STL](https://github.com/microsoft/STL).

I can confirm that this patch makes a number of tests compatible with
microsoft STL:
`Failed :  204 (2.12%)`  ->  `Failed :  136 (1.42%)`
, and does not break any tests on `libcxx`.

This is not a complete list of such incompatibilities, but I am hoping
this will start a discussion about whether we are open to accepting such
changes.
2023-11-12 17:30:15 +01:00
Louis Dionne
acb9156266 [libc++][NFC] Fix license comment typo
Fixes #72024
2023-11-11 08:24:19 -10:00
Eric
601e8fdd28
Rehome libcxx-builder docker image & attempt gentler termination. (#71604)
There are three changes present in this PR.

1. Use github packages for libcxx-builder rather than dockerhub.

The ldionne/libcxx-builder image will now be hosted at
ghcr.io/libcxx/libcxx-builder. This has the benefit of allowing members
of the github org to push new versions.

In the future I hope to add github actions to rebuild the image as
needed.

2. Add docker-compose file

The compose file allows to to specify the package repository, so that
users can simply write 'docker compose build' and 'docker compose push'.

It also gives us a centralized place to manage version arguments which
change frequently.

3. Use non-shell CMD form.

This may help the google libcxx builders disconnect more gracefully as
the shell form of CMD may eat the shutdown signal. I'm hoping this
corrects inaccurate agent counts from the buildkite API, since when the
VM's terminate, they do so without signaling it to buildkite, which
hangs around waiting for them to reconnect. It's likely more changes
will be needed though.

---------

Co-authored-by: Mark de Wever <zar-rpg@xs4all.nl>
2023-11-10 08:24:39 -05:00
Louis Dionne
ea89965b3c
[libc++] Update Clang version check in __config (#71849)
We only support Clang >= 16, but we seem to have forgotten to update the
version check in __config to reflect that.
2023-11-10 01:55:20 +01:00
Alexander Richardson
d002ce55f2
[runtimes] Add a qemu-system executor script (#68643)
This is useful when trying to test libc++/libc++abi/libunwind against a
baremetal enviroment (e.g. picolibc).

See also https://reviews.llvm.org/D155521
2023-11-09 21:09:06 +00:00
Louis Dionne
553ae2f866
[libc++] Remove outdated _LIBCPP_CLANG_VER check (#71759)
We always use Clang >= 16 now, so the check for Clang >= 14 is
tautological. As a drive-by, clang-format the header.
2023-11-09 09:09:39 -10:00
Jake Egan
67d29fbd49
[libc++][AIX] Adjust support of timespec_get test (#71827)
The function `timespec_get` is not available without an update to the
time.h header in AIX 7.3 TL2 (7.3.2.*).
2023-11-09 09:05:32 -10:00
Tacet
8a454e1e3c
[libc++][ASan] Removing clang version checks (#71673)
This commit removes checks like `_LIBCPP_CLANG_VER >= 1600` related to
ASan annotations. As only 2 previous versions are supported, it's a TODO
for LLVM 18.
2023-11-08 16:28:08 -10:00
Konstantin Varlamov
64d413efdd
[libc++][hardening] Rework macros for enabling the hardening mode. (#70575)
1. Instead of using individual "boolean" macros, have an "enum" macro
`_LIBCPP_HARDENING_MODE`. This avoids issues with macros being
mutually exclusive and makes overriding the hardening mode within a TU
more straightforward.

2. Rename the safe mode to debug-lite.

This brings the code in line with the RFC:
https://discourse.llvm.org/t/rfc-hardening-in-libc/73925

Fixes #65101
2023-11-08 09:10:00 -10:00
Mark de Wever
3d131f960e
[libc++][CI] Adds a new CMake version in Docker. (#71582)
This allows testing the upcoming CMake 3.28 release in the CI. CMake
3.28 will have non-experimental support for C++20 modules. So this would
be a better CMake version for the modular builds.

The goal is to remove CMake 3.27 from the CI when the builder work
properly with 3.28.
2023-11-08 17:51:27 +01:00
Mark de Wever
7cc72a0a2e Implement syncstream (p0053)
This patch implements `std::basic_syncbuf` and `std::basic_osyncstream` as specified in paper p0053r7. ~~For ease of reviewing I am submitting this patch before submitting a patch for `std::basic_osyncstream`. ~~

~~Please note, this patch is not 100% complete. I plan on adding more tests (see comments), specifically I plan on adding tests for multithreading and synchronization.~~

Edit: I decided that it would be far easier for me to keep track of this and make changes that affect both `std::basic_syncbuf` and `std::basic_osyncstream` if both were in one patch.

The patch was originally written by @zoecarver

Implements
- P0053R7 - C++ Synchronized Buffered Ostream
- LWG-3127 basic_osyncstream::rdbuf needs a const_cast
- LWG-3334 basic_osyncstream move assignment and destruction calls basic_syncbuf::emit() twice
- LWG-3570 basic_osyncstream::emit should be an unformatted output function
- LWG-3867 Should std::basic_osyncstream's move assignment operator be noexcept?

Reviewed By: ldionne, #libc

Differential Revision: https://reviews.llvm.org/D67086
2023-11-08 17:45:06 +01:00
Konstantin Varlamov
b85fdc4ffd
[libc++][hardening] Add _LIBCPP_ASSERT_NON_NULL to check for null pointers (#71428) 2023-11-07 16:12:15 -10:00
Louis Dionne
02540b2f6d
[libc++] Make sure ranges algorithms and views handle boolean-testable correctly (#69378)
Before this patch, we would fail to implicitly convert the result of
predicates to bool, which means we'd potentially perform a copy or move
construction of the boolean-testable, which isn't allowed. The same
holds true for comparing iterators against sentinels, which is allowed
to return a boolean-testable type.

We already had tests aiming to ensure correct handling of these types,
but they failed to provide appropriate coverage in several cases due to
guaranteed RVO. This patch fixes the tests, adds tests for missing
algorithms and views, and fixes the actual problems in the code.

Fixes #69074
2023-11-06 21:19:49 -10:00
Louis Dionne
b3857b2ecf
[libc++][NFC] Make data members of counted_iterator private (#70491)
There's no reason for them to be public AFAICT. I came across this while
auditing the code bases for places where we'd be using
[[no_unique_address]] incorrectly. Since one of these members is marked
as [[no_unique_address]], this is an extra reason to keep this private
to ensure the member isn't escaped anywhere.
2023-11-06 09:23:21 -10:00
Zoe Carver
7a62bee611 [libc++] Implement std::experimental::observer_ptr
This patch adds std::experimental::observer_ptr (n4282) and also
fixes LWG2516.

Co-Authored-By: Louis Dionne <ldionne.2@gmail.com>
Differential Revision: https://reviews.llvm.org/D63230
2023-11-05 17:59:04 -07:00
Louis Dionne
cf7d4f543c
[libc++] Handle threads-related .cpp files like we do all other source files (#71100)
Source files in libc++ are added to the CMake targets only if they are
required by the configuration. We do this pretty consistently for all
configurations like no-filesystem, no-random-device, etc. but we didn't
do it for no-threads. This patch makes this consistent for no-threads,
which is helpful in reducing the amount of work required to port libc++
to some platforms without threads.

Indeed, with the previous approach, several threads-related source files
would end up including headers that might fail to compile properly on
some platforms. This issue is sidestepped entirely by making the
approach for no-threads consistent with the other configurations.
2023-11-05 17:08:24 -07:00
Louis Dionne
25a2d51842
[libc++] Guard the whole print.cpp file with _LIBCPP_WIN32API (#71122)
The print.cpp source file is only used when building on Windows. Avoid
including anything else but <__config> in the file in the case where
there's nothing to compile here at all. As a drive-by change, use
_LIBCPP_WIN32API consistently instead of _WIN32.
2023-11-05 16:24:34 -07:00
Louis Dionne
2b4b26ea84
[libc++] Improve tests for std::find_if and std::find_if_not (#71192)
These tests are salvaged from https://reviews.llvm.org/D112152 which I
decided not to pursue anymore.
2023-11-05 16:23:27 -07:00
Louis Dionne
8a7846fe86
[libc++] Bump the C++ Standard used to compile the dylib to C++23 (#66824)
This is necessary in order to implement some papers like P2467R1, which
require using C++23 declarations in the dylib. It is a good habit to
keep building the dylib with a recent standard version regardless.

With this patch, we also stop strictly enforcing that the targets are
built with C++23. Concretely, C++23 will soon be required in order to
build the dylib, but not enforcing it strictly works around some issues
like the documentation bots using an old and unsupported compiler. Since
these bots do not actually build the library, not strictly enforcing the
C++ Standard makes our CMake build more resilient to these kinds of
situation. This is just a workaround though, the better way of going
about would be to update the compiler on the documentation bot but we
don't seem to have control over that.
2023-11-05 08:40:51 -05:00
Konstantin Varlamov
aa9f14a52d
[libc++][format] Fix a missing include in <format> tests. (#71252) 2023-11-05 08:32:51 -05:00
Ryan Prichard
76b1a7c916
[libc++][Android] Explicitly declare low-level lib existence (#70534)
Android's librt and libpthread functionality is part of libc.{a,so}
instead. The atomic APIs are part of the compiler-rt builtins archive.
Android does have libdl.

Android's libc.so has `__cxa_thread_atexit_impl` starting in API 23, and
the oldest supported API is 21, so continue using feature detection for
that API.

These settings need to be declared explicitly for the sake of the fuzzer
library's custom libc++ build `add_custom_libcxx`. That macro builds
libc++ using `-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY`, which
breaks the feature detection.
2023-11-03 12:54:55 -07:00
Louis Dionne
1061c0150b
[libc++] Remove legacy feature suse-linux-enterprise-server-11 (#71103)
This Lit feature is not defined anywhere anymore and that platform is
not on our radar for support, so this is basically dead code.
2023-11-03 09:48:38 -04:00
Konstantin Varlamov
fe300f35ca
[libc++][hardening] Add tests for the hardened mode with ABI breaks. (#71020)
Add a new test mode that enables the hardened mode in combination with
ABI-breaking changes (only bounded iterators currently) and reenable the
bounded iterator tests for `span` and `string_view`.
2023-11-03 09:46:19 -04:00
Konstantin Varlamov
766772342c
[libc++][hardening] Clean up some legacy debug mode tests: (#71016)
- reenable a few tests that still pass under the new debug mode;
- delete a placeholder test;
- delete a test that is no longer relevant.
2023-11-02 15:02:57 -07:00
Konstantin Varlamov
e98195f318
[libc++] Fix another potentially flaky atomic test. (#71011)
This is a follow-up to https://github.com/llvm/llvm-project/pull/70436.
2023-11-01 23:57:05 -07:00
philnik777
ec350ad418
[libc++] Remove availability annotations which can never be triggered (#69226)
According to https://developer.apple.com/support/xcode/, quite a few of
our availability macros don't do anything anymore, so we might as well
remove them to clean up the code a bit.
2023-11-01 23:56:43 +01:00
Louis Dionne
dba04bbcf4
[libc++] Add a %{verify} substitution (#70878)
This makes it easier to write .sh.cpp tests that perform multiple clang-verify checks in the same test.
2023-11-01 14:35:18 -07:00
ZhangYin
e3c2eacfd8
[libc++] <experimental/simd> Add default constructor for class simd/simd_mask (#70424) 2023-11-01 10:51:23 -04:00
Louis Dionne
979c19ab12
[libc++] Fix complexity guarantee in ranges::clamp (#68413)
This patch prevents us from calling the projection more than 3 times in
std::clamp, as required by the Standard.

Fixes #64717
2023-11-01 10:43:05 -04:00
Will Hawkins
8c0e2963eb
[libc++][NFC] Update ignore_format for expected tests (#70869)
After changes to <expected>, more test files are now properly formatted.
2023-10-31 23:56:46 +01:00
Jake Egan
4fc7019791 [libc++][AIX] Add OS version to target triple
This will allow for configuring tests according to AIX version.

Reviewed By: daltenty, #libc, Mordante

Differential Revision: https://reviews.llvm.org/D149660
2023-10-31 16:23:05 -04:00
Jade Lovelace
a3ee0d4fac
[libc++] Remove unnecessary <cstdint> include from <string> (#70613)
<string> doesn't use any declarations from <cstdint> and this doesn't change
the transitive includes, so this is effectively a NFC cleanup.
2023-10-31 13:30:24 -04:00
philnik777
e7de95595c
[libc++] Remove alignment_of uses (#70591)
There is no reason to use `alignment_of<T>` instead of `alignof(T)` or
`_LIBCPP_ALIGNOF(T)`. It only makes the code more verbose and results in
slightly worse compile times.
2023-10-31 10:24:44 -04:00
Petr Hosek
a5403a3a69
[libcxx] Amend XFAIL for failing tests on Windows (#70422)
Some tests starting passing/failing after #69431 because Clang no longer
enables -fdelayed-template-parsing by default on Windows with C++20.
2023-10-30 23:45:03 -04:00
Jan Kokemüller
134c915955
[libc++] Fix UB in <expected> related to "has value" flag (#68552) (#68733)
The calls to std::construct_at might overwrite the previously set
__has_value_ flag in the case where the flag is overlapping with
the actual value or error being stored (since we use [[no_unique_address]]).
To fix this issue, this patch ensures that we initialize the
__has_value_ flag after we call std::construct_at.

Fixes #68552
2023-10-30 14:56:03 -04:00
Louis Dionne
3c5885535a
[libc++][tests] Fix a few remaining instances of outdated static assertion regexes in our test suite (#70454)
This is a re-application of 166b3a86173, which was reverted in
fde1ecdec878b because it broke some tests.
2023-10-30 17:28:51 +01:00
philnik777
a65070a76a
[libc++] Remove a few transitive includes (#70553) 2023-10-29 18:31:37 +01:00
Nikolas Klauser
640274ff1f [libc++][NFC] Refactor __enable_ifs in <cstddef> to be defaulted
template arguments

This makes the library more consistent and reduces the size of mangled
names a bit as a bonus.
2023-10-29 11:49:50 +01:00
Vitaly Buka
22c3d9d9a4 [libc++] Disable test which timeouts on ARM with sanitizers
Introduced with cf0f6a146038ca95e9ab9df40c153fd22015a042 (#70020).

https://lab.llvm.org/buildbot/#/builders/237/builds/5145
https://lab.llvm.org/buildbot/#/builders/236/builds/7004
https://lab.llvm.org/buildbot/#/builders/239/builds/4269

Sometimes it passes with Asan but it's extemly slow

```
Slowest Tests:
1388.61s: llvm-libc++-shared.cfg.in :: std/experimental/simd/simd.reference/reference_assignment.pass.cpp
309.42s:  llvm-libc++-shared.cfg.in :: std/containers/sequences/deque/deque.modifiers/insert_size_value.pass.cpp
```
2023-10-27 14:28:28 -07:00
Louis Dionne
574c5cc9d8 [libc++] Fix incorrect length check in std::basic_filebuf
This patch fixes an ASAN-found issue in std::basic_filebuf where we'd
check the wrong size before proceeding to set our internal buffer to
the externally-provided buffer, leading to the library trying to read
from the incorrect buffer in underflow().

Thanks to Andrey Semin for the patch.

Differential Revision: https://reviews.llvm.org/D154514
2023-10-27 10:21:50 -04:00
Louis Dionne
cb950c9dc9
[libc++] Make sure we implement and test LWG2280 properly (#67670)
We did not mark std::begin/std::end as noexcept for C-style arrays, we
did not have conditional noexcept on cbegin/cend, and we did not mark
array cbegin/cend as constexpr in all Standard modes. Since this is a
LWG issue, we should implement it as a DR in all Standard modes as
usual.

This patch fixes these issues and adds test coverage. Fixes #67471.
2023-10-27 10:19:20 -04:00
Konstantin Varlamov
b3b611fe1a
[libc++] Fix flakiness in atomic_notify_all.pass.cpp (#70436)
Avoid relying on sleep for synchronization.
2023-10-27 09:49:54 -04:00
Rajveer Singh Bharadwaj
dd4891318c
[libc++] Fix _CopySegment helper in ranges::copy(join_view, out) when called in a static assertion context (#69593)
Resolves Issue #69083

The `_CopySegment` helper for `ranges::copy(join_view, out)` is not
`constexpr` causing rejection in `libc++` in a static assertion context
as in the issue snippet.
2023-10-27 11:07:12 +02:00
Vitaly Buka
fde1ecdec8 Revert "[libc++][tests] Fix a few remaining instances of outdated static assertion regexes in our test suite"
Fails like https://lab.llvm.org/buildbot/#/builders/238/builds/6278/steps/11/logs/stdio on many bots.

This reverts commit 166b3a86173666ccf823d09e30f40f4a0d386e18.
2023-10-27 00:02:31 -07:00
Vitaly Buka
8d30e80166 Fix typo in c07903aac7b9bc60d48f0381073285d79642cc3f 2023-10-26 23:44:58 -07:00
Vitaly Buka
c07903aac7 [libc++abi] Disable test with a leaks
Leak could be real, as the code terminates before freeing the memory.
2023-10-26 21:48:56 -07:00