mirror of
https://gcc.gnu.org/git/gcc.git
synced 2025-01-04 18:13:44 +08:00
Tweak vector::_M_realloc_insert for code size
2017-11-17 Marc Glisse <marc.glisse@inria.fr> * include/bits/vector.tcc (vector::_M_realloc_insert): Cache old values before the allocation. From-SVN: r254849
This commit is contained in:
parent
b1e35f49e8
commit
c261ba2c8b
@ -1,3 +1,8 @@
|
||||
2017-11-17 Marc Glisse <marc.glisse@inria.fr>
|
||||
|
||||
* include/bits/vector.tcc (vector::_M_realloc_insert): Cache old
|
||||
values before the allocation.
|
||||
|
||||
2017-11-16 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
* include/std/future (shared_future): Add noexcept to copy constructor
|
||||
|
@ -421,6 +421,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
|
||||
{
|
||||
const size_type __len =
|
||||
_M_check_len(size_type(1), "vector::_M_realloc_insert");
|
||||
pointer __old_start = this->_M_impl._M_start;
|
||||
pointer __old_finish = this->_M_impl._M_finish;
|
||||
const size_type __elems_before = __position - begin();
|
||||
pointer __new_start(this->_M_allocate(__len));
|
||||
pointer __new_finish(__new_start);
|
||||
@ -442,14 +444,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
|
||||
|
||||
__new_finish
|
||||
= std::__uninitialized_move_if_noexcept_a
|
||||
(this->_M_impl._M_start, __position.base(),
|
||||
(__old_start, __position.base(),
|
||||
__new_start, _M_get_Tp_allocator());
|
||||
|
||||
++__new_finish;
|
||||
|
||||
__new_finish
|
||||
= std::__uninitialized_move_if_noexcept_a
|
||||
(__position.base(), this->_M_impl._M_finish,
|
||||
(__position.base(), __old_finish,
|
||||
__new_finish, _M_get_Tp_allocator());
|
||||
}
|
||||
__catch(...)
|
||||
@ -463,10 +465,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
|
||||
__throw_exception_again;
|
||||
}
|
||||
_GLIBCXX_ASAN_ANNOTATE_REINIT;
|
||||
std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
|
||||
_M_get_Tp_allocator());
|
||||
_M_deallocate(this->_M_impl._M_start,
|
||||
this->_M_impl._M_end_of_storage - this->_M_impl._M_start);
|
||||
std::_Destroy(__old_start, __old_finish, _M_get_Tp_allocator());
|
||||
_M_deallocate(__old_start,
|
||||
this->_M_impl._M_end_of_storage - __old_start);
|
||||
this->_M_impl._M_start = __new_start;
|
||||
this->_M_impl._M_finish = __new_finish;
|
||||
this->_M_impl._M_end_of_storage = __new_start + __len;
|
||||
|
Loading…
Reference in New Issue
Block a user