[libcxx-commits] [libcxx] Fix capacity increase issue with `shrink_to_fit` for `__split_buffer` (PR #117720)
Peng Liu via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Nov 26 07:18:36 PST 2024
https://github.com/winner245 updated https://github.com/llvm/llvm-project/pull/117720
>From 956846a2ccb1386850e2dc85d4a58837959b9a40 Mon Sep 17 00:00:00 2001
From: Peng Liu <winner245 at hotmail.com>
Date: Tue, 26 Nov 2024 10:01:22 -0500
Subject: [PATCH] Fix __split_buffer::shrink_to_fit
---
libcxx/include/__split_buffer | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/libcxx/include/__split_buffer b/libcxx/include/__split_buffer
index a44811c766735a..a637c83d17d107 100644
--- a/libcxx/include/__split_buffer
+++ b/libcxx/include/__split_buffer
@@ -410,12 +410,14 @@ _LIBCPP_CONSTEXPR_SINCE_CXX20 void __split_buffer<_Tp, _Allocator>::shrink_to_fi
try {
#endif // _LIBCPP_HAS_EXCEPTIONS
__split_buffer<value_type, __alloc_rr&> __t(size(), 0, __alloc_);
- __t.__construct_at_end(move_iterator<pointer>(__begin_), move_iterator<pointer>(__end_));
- __t.__end_ = __t.__begin_ + (__end_ - __begin_);
- std::swap(__first_, __t.__first_);
- std::swap(__begin_, __t.__begin_);
- std::swap(__end_, __t.__end_);
- std::swap(__cap_, __t.__cap_);
+ if (__t.capacity() < capacity()) {
+ __t.__construct_at_end(move_iterator<pointer>(__begin_), move_iterator<pointer>(__end_));
+ __t.__end_ = __t.__begin_ + (__end_ - __begin_);
+ std::swap(__first_, __t.__first_);
+ std::swap(__begin_, __t.__begin_);
+ std::swap(__end_, __t.__end_);
+ std::swap(__cap_, __t.__cap_);
+ }
#if _LIBCPP_HAS_EXCEPTIONS
} catch (...) {
}
More information about the libcxx-commits
mailing list