]> git.ipfire.org Git - thirdparty/gcc.git/commit
libstdc++: Express std::vector's size() <= capacity() invariant in code
authorJonathan Wakely <jwakely@redhat.com>
Thu, 25 May 2023 08:57:46 +0000 (09:57 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Wed, 31 May 2023 20:01:15 +0000 (21:01 +0100)
commitfb409a15d9babc78fe1d9957afcbaf1102cce58f
treeb597fb9c7e3211c9099661a94a765f54b4cb9f9c
parenta239a35075ffd8b34f1db72c22998a625ff962b5
libstdc++: Express std::vector's size() <= capacity() invariant in code

This adds optimizer hints so that GCC knows that size() <= capacity() is
always true. This allows the compiler to optimize away re-allocating
paths when assigning new values to the vector without resizing it, e.g.,
vec.assign(vec.size(), new_val).

libstdc++-v3/ChangeLog:

* include/bits/stl_vector.h (_Vector_base::_M_invariant()): New
function.
(vector::size(), vector::capacity()): Call _M_invariant().
* testsuite/23_containers/vector/capacity/invariant.cc: New test.
* testsuite/23_containers/vector/types/1.cc: Add suppression for
false positive warning (PR110060).
libstdc++-v3/include/bits/stl_vector.h
libstdc++-v3/testsuite/23_containers/vector/capacity/invariant.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/vector/types/1.cc