diff options
Diffstat (limited to 'libcxx')
-rw-r--r-- | libcxx/docs/Contributing.rst | 89 | ||||
-rw-r--r-- | libcxx/include/CMakeLists.txt | 2 | ||||
-rw-r--r-- | libcxx/include/__fwd/map.h | 31 | ||||
-rw-r--r-- | libcxx/include/__fwd/set.h | 30 | ||||
-rw-r--r-- | libcxx/include/__tree | 42 | ||||
-rw-r--r-- | libcxx/include/map | 6 | ||||
-rw-r--r-- | libcxx/include/module.modulemap.in | 2 | ||||
-rw-r--r-- | libcxx/include/set | 6 |
8 files changed, 96 insertions, 112 deletions
diff --git a/libcxx/docs/Contributing.rst b/libcxx/docs/Contributing.rst index 6aaa707..ac85619 100644 --- a/libcxx/docs/Contributing.rst +++ b/libcxx/docs/Contributing.rst @@ -174,10 +174,11 @@ Pre-commit CI Introduction ------------ -Unlike most parts of the LLVM project, libc++ uses a pre-commit CI [#]_. This -CI is hosted on `Buildkite <https://buildkite.com/llvm-project/libcxx-ci>`__ and -the build results are visible in the review on GitHub. Please make sure -the CI is green before committing a patch. +Unlike most parts of the LLVM project, libc++ uses a pre-commit CI [#]_. Some of +this CI is hosted on `Buildkite <https://buildkite.com/llvm-project/libcxx-ci>`__, +but some has migrated to the LLVM CI infrastructure. The build results are +visible in the review on GitHub. Please make sure the CI is green before +committing a patch. The CI tests libc++ for all :ref:`supported platforms <SupportedPlatforms>`. The build is started for every commit added to a Pull Request. A complete CI @@ -246,21 +247,89 @@ Below is a short description of the most interesting CI builds [#]_: Infrastructure -------------- -All files of the CI infrastructure are in the directory ``libcxx/utils/ci``. -Note that quite a bit of this infrastructure is heavily Linux focused. This is -the platform used by most of libc++'s Buildkite runners and developers. +The files for the CI infrastructure are split between the llvm-project +and the llvm-zorg repositories. All files of the CI infrastructure in +the llvm-project are in the directory ``libcxx/utils/ci``. Note that +quite a bit of this infrastructure is heavily Linux focused. This is +the platform used by most of libc++'s Buildkite runners and +developers. -Dockerfile -~~~~~~~~~~ +Dockerfile/Container Images +~~~~~~~~~~~~~~~~~~~~~~~~~~~ Contains the Docker image for the Ubuntu CI. Because the same Docker image is used for the ``main`` and ``release`` branch, it should contain no hard-coded -versions. It contains the used versions of Clang, various clang-tools, +versions. It contains the used versions of Clang, various clang-tools, GCC, and CMake. .. note:: This image is pulled from Docker hub and not rebuild when changing the Dockerfile. +Updating the CI testing container images +---------------------------------------- + +The libcxx linux premerge testing can run on one of three sets of runner +groups. The three runner group names are "llvm-premerge-libcxx-runners", +"llvm-premerge-libcxx-release-runners" and "llvm-premerge-libcxx-next-runners". +Which runner set to use is controlled by the contents of +https://github.com/llvm/llvm-project/blob/main/.github/workflows/libcxx-build-and-test.yaml. +By default, it uses "llvm-premerge-libcxx-runners". To switch to one of the +other runner sets, just replace all uses of "llvm-premerge-libcxx-runners" in +the yaml file with the desired runner set. + +Which container image is used by these three runner sets is controlled +and set by the variable values in +https://github.com/llvm/llvm-zorg/blob/main/premerge/premerge_resources/variables.tf. +The table below shows the variable names and +the runner sets to which they correspond. To see their values, follow the +link above (to variables.tf in llvm-zorg). + ++------------------------------------+---------------------------+ +|Runner Set |Variable | ++====================================+===========================+ +|llvm-premerge-libcxx-runners |libcxx_runner_image | ++------------------------------------+---------------------------+ +|llvm-premerge-libcxx-release-runners|libcxx_release_runner_image| ++------------------------------------+---------------------------+ +|llvm-premerge-libcxx-next-runners |libcxx_next_runner_image | ++------------------------------------+---------------------------+ + + +When updating the container image you can either update just the +runner binary (the part the connects to Github), or you can update +everything (tools, etc.). Whether to update just the runner or to update +everything is controlled by the value of ``ACTIONS_BASE_IMAGE``, under +``actions-builder`` in ``libcxx/utils/ci/docker-compose.yml``. + +To update just the runner binary, change the value of ``ACTIONS_BASE_IMAGE`` +to be a modified version of one of the libcxx runner variable images from +https://github.com/llvm/llvm-zorg/blob/main/premerge/premerge_resources/variables.tf, +as follows: Find the libcxx runner image name you want to use from the +variables.tf file. The name will be something like +``ghcr.io/llvm/libcxx-linux-builder:<some-commit-SHA>``. Replace +``libcxx-linux-builder`` with ``libcxx-linux-builder-base``. Use this new image +name as the value you assign to ``ACTIONS_BASE_IMAGE``. + +To update the entire container image, set the value of ``ACTIONS_BASE_IMAGE`` +to ``builder-base``. If the value is already ``builder-base`` (there +have been no just-the-runner updates since the last complete update), then you +need to find the line containing ``RUN echo "Last forced update executed on`` +in ``libcxx/utils/ci/Dockerfile`` and update the date to be the current date. + +Once you have created and merged a PR with those changes, a new image +will be created, and a link to it can be found at +https://github.com/llvm/llvm-project/pkgs/container/libcxx-linux-builder, +where the actual image name should be +``ghcr.io/llvm/libcxx-linux-builder:<SHA-of-committed-change-from-PR>``. + +Lastly you need to create a PR in the llvm-zorg repository, +updating the the value of the appropriate libcxx runner variable in +the variables.tf file mentioned above to the name of your newly created +image (see above paragraph about finding the image name). Once that change +has been merged, an LLVM premerge maintainer (a Google employee) must use +terraform to apply the change to the running GKE cluster. + + run-buildbot-container ~~~~~~~~~~~~~~~~~~~~~~ diff --git a/libcxx/include/CMakeLists.txt b/libcxx/include/CMakeLists.txt index 51444ec..c6b87a3 100644 --- a/libcxx/include/CMakeLists.txt +++ b/libcxx/include/CMakeLists.txt @@ -447,14 +447,12 @@ set(files __fwd/get.h __fwd/ios.h __fwd/istream.h - __fwd/map.h __fwd/mdspan.h __fwd/memory.h __fwd/memory_resource.h __fwd/ostream.h __fwd/pair.h __fwd/queue.h - __fwd/set.h __fwd/span.h __fwd/sstream.h __fwd/stack.h diff --git a/libcxx/include/__fwd/map.h b/libcxx/include/__fwd/map.h deleted file mode 100644 index 940298d..0000000 --- a/libcxx/include/__fwd/map.h +++ /dev/null @@ -1,31 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP___FWD_MAP_H -#define _LIBCPP___FWD_MAP_H - -#include <__config> -#include <__fwd/functional.h> -#include <__fwd/memory.h> -#include <__fwd/pair.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template <class _Key, class _Tp, class _Compare = less<_Key>, class _Allocator = allocator<pair<const _Key, _Tp> > > -class map; - -template <class _Key, class _Tp, class _Compare = less<_Key>, class _Allocator = allocator<pair<const _Key, _Tp> > > -class multimap; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___FWD_MAP_H diff --git a/libcxx/include/__fwd/set.h b/libcxx/include/__fwd/set.h deleted file mode 100644 index d5ef8d5..0000000 --- a/libcxx/include/__fwd/set.h +++ /dev/null @@ -1,30 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP___FWD_SET_H -#define _LIBCPP___FWD_SET_H - -#include <__config> -#include <__fwd/functional.h> -#include <__fwd/memory.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -template <class _Key, class _Compare = less<_Key>, class _Allocator = allocator<_Key> > -class set; - -template <class _Key, class _Compare = less<_Key>, class _Allocator = allocator<_Key> > -class multiset; - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___FWD_SET_H diff --git a/libcxx/include/__tree b/libcxx/include/__tree index 6ca1a62..3dd5ae5 100644 --- a/libcxx/include/__tree +++ b/libcxx/include/__tree @@ -13,9 +13,7 @@ #include <__algorithm/min.h> #include <__assert> #include <__config> -#include <__fwd/map.h> #include <__fwd/pair.h> -#include <__fwd/set.h> #include <__iterator/distance.h> #include <__iterator/iterator_traits.h> #include <__iterator/next.h> @@ -686,16 +684,6 @@ private: friend class __tree; template <class, class, class> friend class __tree_const_iterator; - template <class> - friend class __map_iterator; - template <class, class, class, class> - friend class map; - template <class, class, class, class> - friend class multimap; - template <class, class, class> - friend class set; - template <class, class, class> - friend class multiset; }; template <class _Tp, class _NodePtr, class _DiffType> @@ -709,18 +697,15 @@ class __tree_const_iterator { __end_node_pointer __ptr_; public: - using iterator_category = bidirectional_iterator_tag; - using value_type = __get_node_value_type_t<_Tp>; - using difference_type = _DiffType; - using reference = const value_type&; - using pointer = __rebind_pointer_t<_NodePtr, const value_type>; + using iterator_category = bidirectional_iterator_tag; + using value_type = __get_node_value_type_t<_Tp>; + using difference_type = _DiffType; + using reference = const value_type&; + using pointer = __rebind_pointer_t<_NodePtr, const value_type>; + using __non_const_iterator _LIBCPP_NODEBUG = __tree_iterator<_Tp, __node_pointer, difference_type>; _LIBCPP_HIDE_FROM_ABI __tree_const_iterator() _NOEXCEPT : __ptr_(nullptr) {} -private: - typedef __tree_iterator<_Tp, __node_pointer, difference_type> __non_const_iterator; - -public: _LIBCPP_HIDE_FROM_ABI __tree_const_iterator(__non_const_iterator __p) _NOEXCEPT : __ptr_(__p.__ptr_) {} _LIBCPP_HIDE_FROM_ABI reference operator*() const { return __get_np()->__value_; } @@ -762,16 +747,6 @@ private: template <class, class, class> friend class __tree; - template <class, class, class, class> - friend class map; - template <class, class, class, class> - friend class multimap; - template <class, class, class> - friend class set; - template <class, class, class> - friend class multiset; - template <class> - friend class __map_const_iterator; }; template <class _Tp, class _Compare> @@ -1388,8 +1363,9 @@ __tree<_Tp, _Compare, _Allocator>& __tree<_Tp, _Compare, _Allocator>::operator=( if (__root()) __root()->__parent_ = __end_node(); } - __begin_node_ = static_cast<__end_node_pointer>(std::__tree_min(static_cast<__node_base_pointer>(__end_node()))); - __size_ = __t.size(); + __begin_node_ = + __end_node()->__left_ ? static_cast<__end_node_pointer>(std::__tree_min(__end_node()->__left_)) : __end_node(); + __size_ = __t.size(); return *this; } diff --git a/libcxx/include/map b/libcxx/include/map index 0a43bd0..6378218 100644 --- a/libcxx/include/map +++ b/libcxx/include/map @@ -582,7 +582,6 @@ erase_if(multimap<Key, T, Compare, Allocator>& c, Predicate pred); // C++20 # include <__functional/binary_function.h> # include <__functional/is_transparent.h> # include <__functional/operations.h> -# include <__fwd/map.h> # include <__iterator/erase_if_container.h> # include <__iterator/iterator_traits.h> # include <__iterator/ranges_iterator_traits.h> @@ -861,7 +860,10 @@ public: friend class __tree_const_iterator; }; -template <class _Key, class _Tp, class _Compare, class _Allocator> +template <class _Key, class _Tp, class _Compare = less<_Key>, class _Allocator = allocator<pair<const _Key, _Tp> > > +class multimap; + +template <class _Key, class _Tp, class _Compare = less<_Key>, class _Allocator = allocator<pair<const _Key, _Tp> > > class map { public: // types: diff --git a/libcxx/include/module.modulemap.in b/libcxx/include/module.modulemap.in index b07a153e..c431c0c 100644 --- a/libcxx/include/module.modulemap.in +++ b/libcxx/include/module.modulemap.in @@ -1607,7 +1607,6 @@ module std [system] { } module map { - module fwd { header "__fwd/map.h" } header "map" export * export std.iterator.reverse_iterator @@ -1974,7 +1973,6 @@ module std [system] { } module set { - module fwd { header "__fwd/set.h" } header "set" export * export std.iterator.reverse_iterator diff --git a/libcxx/include/set b/libcxx/include/set index 342a529..c77345b 100644 --- a/libcxx/include/set +++ b/libcxx/include/set @@ -522,7 +522,6 @@ erase_if(multiset<Key, Compare, Allocator>& c, Predicate pred); // C++20 # include <__config> # include <__functional/is_transparent.h> # include <__functional/operations.h> -# include <__fwd/set.h> # include <__iterator/erase_if_container.h> # include <__iterator/iterator_traits.h> # include <__iterator/ranges_iterator_traits.h> @@ -570,7 +569,10 @@ _LIBCPP_PUSH_MACROS _LIBCPP_BEGIN_NAMESPACE_STD -template <class _Key, class _Compare, class _Allocator> +template <class _Key, class _Compare = less<_Key>, class _Allocator = allocator<_Key> > +class multiset; + +template <class _Key, class _Compare = less<_Key>, class _Allocator = allocator<_Key> > class set { public: // types: |