]> git.ipfire.org Git - thirdparty/gcc.git/commit
libstdc++: [_GLIBCXX_DEBUG] Implement std::__debug::inplace_vector
authorFrançois Dumont <frs.dumont@gmail.com>
Mon, 22 Sep 2025 16:58:52 +0000 (18:58 +0200)
committerFrançois Dumont <fdumont@gcc.gnu.org>
Wed, 3 Dec 2025 05:56:27 +0000 (06:56 +0100)
commit8a2e6590cc4a2fceb03ec9616d24173c0ea393f5
tree198c61a1fff3454bedd4b83429e93dac753f39bd
parent6cae8aac082b168f46c023cd2cd6355bfd731e2c
libstdc++: [_GLIBCXX_DEBUG] Implement std::__debug::inplace_vector

Add _GLIBCXX_DEBUG std::inplace_vector implementation.

libstdc++-v3/ChangeLog:

* include/Makefile.am (debug_headers): Add inplace_vector.
* include/Makefile.in: Regenerate.
* include/debug/functions.h (__check_valid_range): Add C++20 constexpr.
* include/debug/helper_functions.h (__valid_range): Likewise.
* include/debug/inplace_vector: New.
* include/debug/safe_base.h (~_Safe_sequence_base()): Add C++11 noexcept.
(_Safe_sequence_base::operator=(const _Safe_sequence_base&)): New.
(_Safe_sequence_base::operator=(_Safe_sequence_base&&)): New.
(_Safe_sequence_base::_M_invalidate_all): Add C++20 constexpr.
* include/debug/safe_container.h
(_Safe_container<>::operator=(const _Safe_container<>&)): Implement using
_Safe_sequence_base same operator.
* include/debug/safe_iterator.h (__valid_range): Add C++20 constexpr.
* include/debug/safe_sequence.h
(_Not_equal_to(const _Type&)): Add C++20 constexpr.
(_Equal_to(const _Type&)): Add C++20 constexpr.
(_After_nth_from(const difference_type&, const _Iterator&)): Add C++20 constexpr.
(_Safe_sequence<>::_M_invalidate_if): Add C++20 constexpr.
(_Safe_node_sequence::operator=(const _Safe_node_sequence&)): New.
(_Safe_node_sequence::operator=(_Safe_node_sequence&&)): New.
(_Safe_node_sequence<>::_M_invalidate_all()): Add C++20 constexpr.
* include/debug/safe_sequence.tcc
(_Safe_sequence<>::_M_invalidate_if): Add C++20 constexpr.
* include/std/inplace_vector [_GLIBCXX_DEBUG](std::inplace_vector<>): Move
implementation into __cxx1998 namespace.
(erase, erase_if): Limit to non-debug inplace_vector<>, cleanup code.
[_GLIBCXX_DEBUG]: Add include <debug/inplace_vector>.
* testsuite/23_containers/inplace_vector/cons/1.cc: Adapt, skip several
is_trivially_xxx checks when in _GLIBCXX_DEBUG mode.
* testsuite/23_containers/inplace_vector/copy.cc: Likewise.
* testsuite/23_containers/inplace_vector/move.cc: Likewise.
* testsuite/23_containers/inplace_vector/debug/assign1_neg.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/assign2_neg.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/assign3_neg.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/assign4_backtrace_neg.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/assign4_neg.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/construct1_neg.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/construct2_neg.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/construct3_neg.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/construct4_neg.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/debug_functions.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/erase.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/insert1_neg.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/insert2_neg.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/insert3_neg.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/insert4_neg.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/insert5_neg.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/insert7_neg.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/invalidation/1.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/invalidation/2.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/invalidation/3.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/invalidation/4.cc: New test case.
* testsuite/23_containers/inplace_vector/debug/invalidation/append_range.cc:
New test case.
* testsuite/23_containers/inplace_vector/debug/invalidation/erase.cc:
New test case.
* testsuite/23_containers/inplace_vector/debug/invalidation/pop_back.cc:
New test case.
* testsuite/23_containers/inplace_vector/debug/invalidation/push_back.cc:
New test case.
* testsuite/23_containers/inplace_vector/debug/invalidation/swap.cc:
New test case.
* testsuite/23_containers/inplace_vector/debug/invalidation/try_append_range.cc:
New test case.
* testsuite/23_containers/inplace_vector/debug/invalidation/try_emplace_back.cc:
New test case.
* testsuite/23_containers/inplace_vector/debug/invalidation/try_push_back.cc:
New test case.
* testsuite/23_containers/inplace_vector/debug/invalidation/unchecked_emplace_back.cc:
New test case.
* testsuite/util/debug/checks.h: Avoid using _GLIBCXX_DEBUG containers in test
implementations.
45 files changed:
libstdc++-v3/include/Makefile.am
libstdc++-v3/include/Makefile.in
libstdc++-v3/include/debug/functions.h
libstdc++-v3/include/debug/helper_functions.h
libstdc++-v3/include/debug/inplace_vector [new file with mode: 0644]
libstdc++-v3/include/debug/safe_base.h
libstdc++-v3/include/debug/safe_container.h
libstdc++-v3/include/debug/safe_iterator.h
libstdc++-v3/include/debug/safe_sequence.h
libstdc++-v3/include/debug/safe_sequence.tcc
libstdc++-v3/include/std/inplace_vector
libstdc++-v3/testsuite/23_containers/inplace_vector/cons/1.cc
libstdc++-v3/testsuite/23_containers/inplace_vector/copy.cc
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign1_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign2_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign3_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign4_backtrace_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign4_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct1_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct2_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct3_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct4_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/debug_functions.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/erase.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert1_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert2_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert3_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert4_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert5_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert7_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/1.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/2.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/3.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/4.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/append_range.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/erase.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/pop_back.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/push_back.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/swap.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/try_append_range.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/try_emplace_back.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/try_push_back.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/unchecked_emplace_back.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/inplace_vector/move.cc
libstdc++-v3/testsuite/util/debug/checks.h