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).
Showing
- libstdc++-v3/include/bits/stl_vector.h 27 additions, 3 deletionslibstdc++-v3/include/bits/stl_vector.h
- libstdc++-v3/testsuite/23_containers/vector/capacity/invariant.cc 16 additions, 0 deletions...+-v3/testsuite/23_containers/vector/capacity/invariant.cc
- libstdc++-v3/testsuite/23_containers/vector/types/1.cc 1 addition, 1 deletionlibstdc++-v3/testsuite/23_containers/vector/types/1.cc
Loading
Please register or sign in to comment