[libc++] Add the C++17 <memory_resource> header (mono-patch)
authorArthur O'Dwyer <arthur.j.odwyer@gmail.com>
Thu, 6 Oct 2022 20:53:30 +0000 (16:53 -0400)
committerLouis Dionne <ldionne.2@gmail.com>
Tue, 11 Oct 2022 12:40:46 +0000 (08:40 -0400)
commit243da90ea5357c1ca324f714ea4813dc9029af27
tree006de4112215ddc194dd5bfd1689a65f4d85b095
parentdefe7c07f0db9d18a59087dd7aaf7becb38595b2
[libc++] Add the C++17 <memory_resource> header (mono-patch)

This patch is the rebase and squash of three earlier patches.
It supersedes all three of them.

- D47111: experimental monotonic_buffer_resource.
- D47358: experimental pool resources.
- D47360: Copy std::experimental::pmr to std::pmr.

The significant difference between this patch and the-sum-of-those-three
is that this patch does not add `std::experimental::pmr::monotonic_buffer_resource`
and so on. This patch simply adds the C++17 standard facilities, and
leaves the `std::experimental` namespace entirely alone.

Differential Revision: https://reviews.llvm.org/D89057
131 files changed:
libcxx/docs/FeatureTestMacroTable.rst
libcxx/docs/ReleaseNotes.rst
libcxx/include/CMakeLists.txt
libcxx/include/__memory_resource/memory_resource.h [new file with mode: 0644]
libcxx/include/__memory_resource/monotonic_buffer_resource.h [new file with mode: 0644]
libcxx/include/__memory_resource/polymorphic_allocator.h [new file with mode: 0644]
libcxx/include/__memory_resource/pool_options.h [new file with mode: 0644]
libcxx/include/__memory_resource/synchronized_pool_resource.h [new file with mode: 0644]
libcxx/include/__memory_resource/unsynchronized_pool_resource.h [new file with mode: 0644]
libcxx/include/deque
libcxx/include/forward_list
libcxx/include/list
libcxx/include/map
libcxx/include/memory_resource [new file with mode: 0644]
libcxx/include/module.modulemap.in
libcxx/include/regex
libcxx/include/set
libcxx/include/string
libcxx/include/unordered_map
libcxx/include/unordered_set
libcxx/include/vector
libcxx/include/version
libcxx/lib/abi/CHANGELOG.TXT
libcxx/lib/abi/arm64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
libcxx/lib/abi/powerpc-ibm-aix.libcxxabi.v1.stable.exceptions.nonew.abilist
libcxx/lib/abi/powerpc64-ibm-aix.libcxxabi.v1.stable.exceptions.nonew.abilist
libcxx/lib/abi/x86_64-apple-darwin.libcxxabi.v1.stable.exceptions.nonew.abilist
libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.exceptions.nonew.abilist
libcxx/lib/abi/x86_64-unknown-linux-gnu.libcxxabi.v1.stable.noexceptions.nonew.abilist
libcxx/src/CMakeLists.txt
libcxx/src/memory_resource.cpp [new file with mode: 0644]
libcxx/src/memory_resource_init_helper.h [new file with mode: 0644]
libcxx/test/libcxx/assertions/headers_declare_verbose_abort.sh.cpp
libcxx/test/libcxx/clang_tidy.sh.cpp
libcxx/test/libcxx/double_include.sh.cpp
libcxx/test/libcxx/min_max_macros.compile.pass.cpp
libcxx/test/libcxx/modules_include.sh.cpp
libcxx/test/libcxx/nasty_macros.compile.pass.cpp
libcxx/test/libcxx/no_assert_include.compile.pass.cpp
libcxx/test/libcxx/private_headers.verify.cpp
libcxx/test/libcxx/transitive_includes.sh.cpp
libcxx/test/libcxx/transitive_includes/cxx03.csv
libcxx/test/libcxx/transitive_includes/cxx11.csv
libcxx/test/libcxx/transitive_includes/cxx14.csv
libcxx/test/libcxx/transitive_includes/cxx17.csv
libcxx/test/libcxx/transitive_includes/cxx20.csv
libcxx/test/libcxx/transitive_includes/cxx2b.csv
libcxx/test/libcxx/utilities/memory/ptr.align/assume_aligned.power2.verify.cpp
libcxx/test/libcxx/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_piecewise_pair.pass.cpp [new file with mode: 0644]
libcxx/test/libcxx/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/debug.deallocate.pass.cpp [new file with mode: 0644]
libcxx/test/libcxx/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.mem/allocate_in_geometric_progression.pass.cpp [new file with mode: 0644]
libcxx/test/libcxx/utilities/utility/mem.res/mem.res.pool/unsynchronized_buffer.pass.cpp [new file with mode: 0644]
libcxx/test/std/language.support/support.limits/support.limits.general/memory_resource.version.compile.pass.cpp [new file with mode: 0644]
libcxx/test/std/language.support/support.limits/support.limits.general/memory_resource.version.pass.cpp [new file with mode: 0644]
libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.ctor/assign.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.ctor/copy.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.ctor/default.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.ctor/memory_resource_convert.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.ctor/other_alloc.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.eq/equal.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.eq/not_equal.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/allocate.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_pair.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_pair_const_lvalue_pair.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_pair_rvalue.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_pair_values.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_piecewise_pair.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_piecewise_pair_evil.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/construct_types.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/deallocate.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/destroy.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/resource.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.poly.allocator.class/mem.poly.allocator.mem/select_on_container_copy_construction.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_deque_synop.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_deque_synop2.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_forward_list_synop.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_list_synop.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_list_synop2.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_map_synop.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_map_synop2.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_regex_synop.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_set_synop.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_set_synop2.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_string_synop.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_string_synop2.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_unordered_map_synop.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_unordered_map_synop2.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_unordered_set_synop.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_unordered_set_synop2.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_vector_synop.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.aliases/header_vector_synop2.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.global/default_resource.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.global/new_delete_resource.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.global/null_memory_resource.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.ctor/copy_move.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.ctor/with_default_resource.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.ctor/without_buffer.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.mem/allocate_deallocate.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.mem/allocate_exception_safety.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.mem/allocate_from_initial_buffer.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.mem/allocate_from_underaligned_buffer.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.mem/allocate_from_zero_sized_buffer.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.mem/allocate_in_geometric_progression.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.mem/allocate_overaligned_request.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.mem/allocate_with_initial_size.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.mem/equality.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.pool/mem.res.pool.ctor/ctor_does_not_allocate.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.pool/mem.res.pool.ctor/sync_with_default_resource.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.pool/mem.res.pool.ctor/unsync_with_default_resource.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.pool/mem.res.pool.mem/equality.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.pool/mem.res.pool.mem/sync_allocate.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.pool/mem.res.pool.mem/sync_allocate_overaligned_request.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.pool/mem.res.pool.mem/sync_allocate_reuse_blocks.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.pool/mem.res.pool.mem/sync_deallocate_matches_allocate.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.pool/mem.res.pool.mem/unsync_allocate.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.pool/mem.res.pool.mem/unsync_allocate_overaligned_request.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.pool/mem.res.pool.mem/unsync_allocate_reuse_blocks.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res.pool/mem.res.pool.mem/unsync_deallocate_matches_allocate.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res/construct.fail.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res/mem.res.eq/equal.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res/mem.res.eq/not_equal.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res/mem.res.private/private_members.fail.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res/mem.res.private/protected_members.fail.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res/mem.res.public/allocate.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res/mem.res.public/deallocate.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res/mem.res.public/dtor.pass.cpp [new file with mode: 0644]
libcxx/test/std/utilities/utility/mem.res/mem.res/mem.res.public/is_equal.pass.cpp [new file with mode: 0644]
libcxx/test/support/count_new.h
libcxx/test/support/test_std_memory_resource.h [new file with mode: 0644]
libcxx/utils/generate_feature_test_macro_components.py