libstdc++: Limit memory allocation in stable_sort/inplace_merge (PR 83938)
authorFrançois Dumont <fdumont@gcc.gnu.org>
Wed, 22 Jan 2020 16:55:54 +0000 (17:55 +0100)
committerFrançois Dumont <fdumont@gcc.gnu.org>
Fri, 20 Nov 2020 21:25:04 +0000 (22:25 +0100)
commitba23e045fcb820e8d32dee361c4d048604d8d599
treed35174a854f07c7952fdf742c5aa6367dc5b20a5
parent9e071b6e5ed5a07a4ce621382904c084431f9d47
libstdc++: Limit memory allocation in stable_sort/inplace_merge (PR 83938)

Reduce memory allocation in stable_sort/inplace_merge algorithms to what is needed
by the implementation.

Co-authored-by: John Chang <john.chang@samba.tv>
libstdc++-v3/ChangeLog:

PR libstdc++/83938
* include/bits/stl_tempbuf.h (get_temporary_buffer): Change __len
computation in the loop to avoid truncation.
* include/bits/stl_algo.h:
(__inplace_merge): Take temporary buffer length from smallest range.
(__stable_sort): Limit temporary buffer length.
* testsuite/25_algorithms/inplace_merge/1.cc (test4): New.
* testsuite/performance/25_algorithms/stable_sort.cc: Test stable_sort
under different heap memory conditions.
* testsuite/performance/25_algorithms/inplace_merge.cc: New test.
libstdc++-v3/include/bits/stl_algo.h
libstdc++-v3/include/bits/stl_tempbuf.h
libstdc++-v3/testsuite/25_algorithms/inplace_merge/1.cc
libstdc++-v3/testsuite/performance/25_algorithms/inplace_merge.cc [new file with mode: 0644]
libstdc++-v3/testsuite/performance/25_algorithms/stable_sort.cc